Как защитить и скомпилировать исходный код Python в библиотеку .so?

я бы хотелprotect my python source codeЯ знаю, что абсолютная защита невозможна, но все же должны быть какие-то средства, чтобы сделать это достаточно трудным или достаточно трудоемким. я хочу

1) удалить всю документацию, комментарии автоматически и

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

Возможно, лучшее решение, которое сделало бы 1) и 2) избыточным, этоfollowing:

3) Есть ли простойway to compile python modules to .so libraries, с понятным интерфейсом и которыйcan be used by other python modules? Это было бы похоже на создание расширений C и C ++ с помощью distutils, за исключением того, что исходным кодом является сам Python, а не C / C ++. Идея состоит в том, чтобы организовать весь «секретный код». в модули, скомпилируйте их, а затем импортируйте их в оставшуюся часть кода Python, который не считается секретным.

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

 mgilson11 июл. 2012 г., 18:16
Я не особо использовал Cython, поэтому не могу сказать. Я подозреваю, что ответ - да, но я действительно не знаю. Может быть, кто-то еще может взвесить это?
 Mannaggia11 июл. 2012 г., 18:07
Можно ли повторно использовать весь код Python, который импортирует библиотеки C ++ .so и использует также NumPy, и скомпилировать его с помощью Cython (без добавления типов или изменения исходного кода)?
 mgilson11 июл. 2012 г., 17:56
Там & APOS; sCython который может делать то, что вы хотите для номера 3, однако, я думаю, вам нужно поддерживать.so для каждой системы и каждой версии Python, что может быть довольно утомительным ... Я не уверен, насколько это будет скрыто от способностей Python к самоанализу.

Ответы на вопрос(1)

Решение Вопроса

Cython, вероятно, является лучшим выбором. Вообще говоря, вы можете использовать его для преобразования исходного кода на чистом python в скомпилированные модули расширения. Хотя основной целью Cython является повышение производительности, не должно быть никаких препятствий для его использования для защиты исходного кода. Модули расширения, которые он выводит, не ограничены какими-либо особыми способами, поэтому все, что вы могли делать из Python ранее, вы должны делать из модулей расширения, сгенерированных Cython. У Cython есть несколько известных ограничений с точки зрения поддерживаемых функций, которые, возможно, придется обойти, но в целом он хорошо подходит для ваших целей.

 25 янв. 2015 г., 17:07
@Mannaggia TryNuitka, он может рекурсивно конвертировать ваши модули py в исходные файлы c ++ и скомпилировать их в один файл so (или автономный исполняемый файл, если хотите).
 Mannaggia13 июл. 2012 г., 18:28
Есть ли хороший и короткий учебник, который стоит прочитать?
 13 июл. 2012 г., 23:00
@Mannaggia - Руководство по Cython выглядит пугающе, но на самом деле его довольно легко прочитать. Более того, вы должны иметь возможность просматривать большую часть, поскольку вы не будете использовать какие-либо функции C-интеграции.
 Mannaggia16 июл. 2012 г., 16:52
спасибо, похоже, работает для одного модуля, но я понял, что модуль, который я собираю, по-прежнему импортирует другие исходные модули Python, есть способ собрать библиотеки .so в cython путем систематической компиляции всех модулей в пакете и проверки того, что каждый модуль импортирует только .so библиотеки, а не исходный питон?
 16 июл. 2012 г., 20:04
Я не знаю ни одного автоматизированного метода. Но, вероятно, было бы довольно легко запустить скрипт, который преобразует все нужные вам файлы .py в эквивалентные файлы .pyx, а затем запустил транслятор cython, чтобы преобразовать их все в файлы .c.

Ваш ответ на вопрос