Дело в том что все скрипты на Python при первом запуске пишутся интерпретатором в виде байткода в файлы с расширением .pyc (это не рус типа РУСский или что-нибудь в этом роде, это PYthonCompiled - т.е. скомпилированый Python код). Интерпретатор Python по умолчанию пытается запускать именно эти файлы, а если он не существует, то использует исходный код после чего записывает этот же pyc-файл. Эти файлы можно создать, так сказать, вручную перед распространением файлов.
Делается это так
>>> import py_compile
>>> py_compile.compile('megascript.py')В результате рядом с megascript.py будет создан файл megascript.pyc который вы и будете продавать. Удачной разработки, и больших заработков!
Links: PEP 304 - Controlling Generation of Bytecode Files
Понравилось? помогло? – Подпишись на RSS!
5 comments:
А как декомпилировать!?
Никак, иначе какой смысл был бы говорить о скрытии кода для продажи если его можно декомпилировать. Ну конечно если мастера которые декомпилят любой софт, но это тема другого разговора.
Еще как, Владимир. Конечно, не может быть смысла продавать якобы скрытый байткод питона, но это не тема отдельных разговоров, просто ваш пост содержит в себе неверную информацию.
Существует:
- модуль marshal, который декомпилирует обратно код питона, совместимый с версиями до 2.3.
- https://sourceforge.net/projects/decompyle, который декомпилирует почти всё остальное.
Пожалуйста, не путайте питонский байт-код http://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B9%D1%82-%D0%BA%D0%BE%D0%B4 и компиляцию-трансляцию в объектные модули http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) (в процессе которой получаются двоичные объектные файлы, и откуда, ага, ничего не вытащить без других разговоров).
Ну 100% от всех умных скрыть в любом случае не получится. Ломают все что угодно. Тот методо что я описал думаю покроет 99% случаев.
Точнее покроет 1%
import marshal, dis
f = open('megascript.pyc', 'rb')
f.read(8)
s = marshal.load(f)
dis.dis(s)
Чуть лучше вариант с py2exe для венды
Post a Comment