Как защитить исходный код Python? - PullRequest
9 голосов
/ 13 января 2010

Можно ли распространять только версию байт-кода (файл .pyc) скрипта Python вместо исходного файла .py? Мое приложение встраивает интерпретатор Python и вызывает PyImport_Import для загрузки скрипта. Как я могу сказать ему искать файл .pyc и импортировать его?

Ответы [ 5 ]

13 голосов
/ 13 января 2010

Используйте инструмент freeze , который включен в исходное дерево Python как Tools / freeze . Он преобразует байт-код Python в массивы C; с помощью компилятора C вы можете встроить все свои модули в новую программу, которая затем связывается со стандартными модулями Python.

Обратите внимание, что для замораживания требуется компилятор C.

Другие коммунальные услуги:

1- PyInstaller

2- Py2Exe

3- Squeeze

4- cx_freeze

подробнее на effbot.org

5 голосов
/ 13 января 2010

Поскольку вы пишете свою основную программу на C ++, вы можете делать все, что захотите, для защиты своих файлов Python. Вы можете зашифровать их для распространения, а затем расшифровать как раз вовремя, чтобы импортировать их, например, в интерпретатор Python.

Поскольку вы используете PyImport_Import, вы можете написать собственный хук __import__, чтобы импортировать модули не из файла, а из буфера памяти, чтобы преобразование в файл .pyc могло происходить в памяти без понятного кода Python. на диске вообще.

5 голосов
/ 13 января 2010

Я сделал это, создав библиотеку .py и простую программу .py, которая использует эту библиотеку. Затем я скомпилировал библиотеку в .pyc и распространил: программу как исходный код .py и библиотеку как скомпилированный .pyc.

2 голосов
/ 13 января 2010

В интерактивном интерпретаторе, это автоматически - если нет .py, .pyc будет по-прежнему использоваться:

$ echo 'print "hello"' > test.py
$ python -m compileall .
$ rm test.py
$ python -m test
hello
$

Не могли бы вы попробовать, если это работает так же с API?

Отредактировано, чтобы добавить: Я согласен с Бер в том, что ваша защита кода будет довольно слабой. -O удалит строки документации, если это не изменит поведения вашей программы, что может усложнить восстановление поведения, но то, что вам действительно нужно, - какое-то запутывание байт-кода.

Я не знаю, существует ли готовый инструмент для запутывания для python, но это звучит жизнеспособно, если вы хотите / можете потратить время (и не слишком глупо делать это и могут отправить вашего собственного переводчика).

2 голосов
/ 13 января 2010

Это не должно быть проблемой, если вы создаете отдельную программу, используя py2exe , вы получаете только файлы .pyc.

Обычно вам не нужно указывать python искать файлы .pyc, так или иначе. Только если есть более новый исходный файл .py, он используется.

Однако уровень защиты вашего исходного кода может быть не очень высоким.

...