Как защитить исходный код Python?

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

5 Solutions collect form web for “Как защитить исходный код Python?”

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

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

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

Другие утилиты:

1- PyInstaller

2- Py2Exe

3- Сжатие

4- cx_freeze

Дополнительная информация о effbot.org

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

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

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

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

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

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

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

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

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

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

  • boost :: python Экспорт пользовательских исключений
  • Производительность S / Python Socket?
  • Как подсчитать количество цифр в разных базах?
  • Вставить функцию python в C ++
  • Почему существует «int + string» в статически типизированном C #, но не в динамически типизированном Python?
  • Получить число модифицированных строк после выполнения sqlite3
  • Публикация приложения MVC, использующего скрипт python
  • Как использовать malloc и бесплатно с python ctypes?
  • Python - лучший язык программирования в мире.