k-2, python - скриптовый язык. Любой костыль типа pyinstaller будет представлять из себя по сути запихивание компилированного байткода с интерпретатором в один архив для удобного запуск, и этот байткод легко превращается в нечто близкое к исходному коду. Есть средства типа pyarmor, которые пытаются этот код максимально запудрить, чтобы в нём было трудно разобраться, но это лишь енсколько усложняет взлом, а не делает его невозможным.
Можно также использовать cython - компилятор кода на python (с некоторыми нюансами и ограничениями) в код на языке C, который можно затем скомпилировать в исполняемый файл. Но это довольно сложный инструмент.
В целом для того, чтобы скрыть от кого-то исходный код, python предназначен крайне плохо.
k-2,
1. Договор самый ультимативный способ защиты
2. другой язык ну так себе, все зависит от квалификации (типичный пример игры)
3. вынос программы в облако круто, но многие клиенты любят что бы все было у них