Jak chronić kod źródłowy Pythona?
Czy można dystrybuować tylko wersję kodu bajtowego (.plik pyc) skryptu Pythona zamiast oryginalnego pliku. py? Moja aplikacja osadza interpreter Pythona i wywołuje PyImport_Import, aby załadować skrypt. Jak mogę powiedzieć, aby szukać .plik pyc i import?
5 answers
Zrobiłem to tworząc bibliotekę. py i prosty program .py, który używa tej biblioteki. Potem skompilowałem bibliotekę do .pyc i rozproszone: program jako źródło. py i biblioteka jako skompilowane .pyc.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-13 08:38:53
Użyj narzędzia freeze , które jest zawarte w drzewie źródłowym Pythona jako Tools/freeze . Konwertuje kod bajtowy Pythona na tablice C; za pomocą kompilatora C możesz osadzić wszystkie swoje moduły w nowym programie, który jest następnie połączony ze standardowymi modułami Pythona.
Zauważ, że freeze wymaga kompilatora C.
Inne narzędzia:
1- PyInstaller
2- Py2Exe
3- Squeeze
4- cx_freeze
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-09 20:35:08
Ponieważ piszesz swój główny program w C++, możesz zrobić wszystko, co chcesz, aby chronić swoje pliki Pythona. Możesz zaszyfrować je do dystrybucji, a następnie odszyfrować w samą porę, aby zaimportować je na przykład do interpretera Pythona.
Ponieważ używasz PyImport_Import, możesz napisać własny hook __import__
, aby zaimportować Moduły nie z pliku, ale z bufora pamięci, więc twoja transformacja do .plik pyc może się zdarzyć wszystko w pamięci, bez zrozumiałego kodu Pythona na dysku w wszystkie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-13 12:44:11
To nie powinno być problemem, jeśli utworzysz samodzielny program za pomocą py2exe otrzymasz tylkopliki pyc.
Normalnie nie musisz mówić pythonowi, żeby szukał .pliki pyc, i tak to robi. Tylko jeśli istnieje nowszy plik źródłowy .py jest to używane.
Jednak poziom ochrony Twojego kodu źródłowego może nie być zbyt wysoki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-13 08:37:10
W interaktywnym interpreterze jest to automatyczne-jeśli nie ma .py, to .pyc nadal będzie używany:
$ echo 'print "hello"' > test.py
$ python -m compileall .
$ rm test.py
$ python -m test
hello
$
Mógłbyś po prostu spróbować, jeśli to działa w ten sam sposób z API?
Edited to add: Zgadzam się z Berem w tym, że Twoja ochrona kodu będzie raczej słaba. -O usunie docstringi, jeśli to nie zmieni zachowania Twojego programu, co może utrudnić rekonstrukcję zachowania, ale naprawdę potrzebujesz jakiegoś zaciemnienia kodu bajtowego.
Nie wiem czy a gotowe narzędzie maskowania istnieje dla Pythona, ale to wydaje się realne, jeśli chcesz / możesz zainwestować czas (i nie czujesz się zbyt głupio robiąc to, i możesz wysłać własny interpreter).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-13 08:46:06