Действительно ли возможно распределить только bytecode версию (.pyc файл) сценария Пайтона вместо оригинального .py файла? Мое приложение включает переводчика Пайтона и называет PyImport_Import, чтобы загрузить сценарий. Как я могу сказать этому искать .pyc файл и импорт это?
Я сделал это, создавая .py библиотека и простая программа .py, которая использует эту библиотеку. Затем я скомпилировал библиотеку в .pyc и распределен: программа как .py Источника и библиотека как скомпилированная .pyc.
Используйте инструмент Freezeze , который включен в исходное дерево Python AS Инструменты / Freeze . Он преобразует код Python Byte для массивов C; С компилятором C вы можете встроить все ваши модули в новую программу, которая затем связана со стандартными модулями Python.
Обратите внимание, что Freeze требует компилятора C.
Другие утилиты:
1- Pyinstaller
2- PY2EXE
3- Сожмите
4- CX_FREEZE
Поскольку вы пишете свою главную программу в C ++, вы можете делать все, что вы хотите защитить свои файлы Python. Вы могли бы шифровать их для распространения, а затем дешифицировать их как раз вовремя для импорта их в переводчик Python, например.
Так как вы используете Pyimport_import, вы можете написать свой собственный __ Import __
крюк для импорта модулей не из файла, а из буфера памяти, поэтому ваше преобразование в файл. Pyc может произойти все в памяти, с Нет понятного кода Python на диске вообще.
В интерактивном интерпретатере, это автоматическое - если нет .py, .pyc все еще будет использоваться:
$ echo 'print "hello"' > test.py
$ python -m compileall .
$ rm test.py
$ python -m test
hello
$
Не могли бы вы просто попробовать, если это работает так же С API?
отредактировано для добавления: Я согласен с BER в том, что ваша защита кода будет довольно слабой. -O удалит DocStrings, если это не изменяет поведение вашей программы, это может сделать восстановление поведения сложнее, но то, что вам действительно понадобится комплект Bytecode.
Я не знаю, если для Python существует готовный инструмент обфускации для Python, но это звучит жизнеспособным, если вы хотите / можете вкладывать время (и не чувствую себя слишком глупым делать это и может отправить свой собственный переводчик).
Как работает шахматный алгоритм?
создать дерево «плата-позиция» пять или 10 или 20 движется в будущее. Если предположить, что их около 20 возможные перемещения для любого положения платы, пятиуровневое дерево содержит 3 200 000 положения платы. 10-уровневое дерево содержит приблизительно 10 000 000 000 000 (10 триллион) позиций. Глубина дерево, которое компьютер может вычислить управляется скоростью компьютер, играющий в игру. Самый быстрый шахматные компьютеры могут генерировать и оценить миллионы позиций платы в секунду.
После создания дерева компьютер должен "оценить плату должности ". То есть компьютер имеет чтобы посмотреть на части на доске и решить, является ли эта договоренность куски - «хорошо» или «плохо». Чем путь это делает это с помощью оценки функция. Простейший из возможных функция может просто считать число частей, которые каждая сторона имеет. Если компьютер играет белый и определенное положение платы имеет 11 белых куски и девять черных кусков, простейшей функцией оценки может быть:
11 - 9 = 2
Очевидно, что для шахмат эта формула слишком просто, потому что некоторые части являются более ценными, чем другие. Так что формула может применять вес к каждому тип детали. Как программист думает об этом, он или она делает функция оценки все больше и больше усложняется добавлением таких вещей, как положение платы, управление центром, уязвимость короля для проверки, уязвимость королевы противника, и тонны других параметров. Нет независимо от того, насколько сложна функция получает, однако он конденсируется до единственное число, представляющее «благость» этого положения платы.
Источник .
Для создания собственного javascript 'engine', который способен играть в шахматы на базовом уровне проверить Шаг за шагом Javascript Chess с CPU oppo
Если вы прокрутите вниз он содержит исходный код этого, должен сказать очень ограниченный, шахматный движок чисто на основе javascript. Он также имеет рабочую версию игры, чтобы опробовать и все необходимые ресурсы для построения своих собственных.
Некоторые полезные ресурсы:
Получается, что достойное решение заключается в том, чтобы обернуть обратный вызов в setTimeout ()
, с задержкой в 0 миллисекунд,чтобы сделать его асинхронным.
Мой новый код:
var urlField = $('#url');
urlField.bind('paste', function(e) {
setTimeout(function() {
alert(urlField.val());
}, 0); // note the 0 milliseconds
});
Благодаря маскированному плагину ввода DigireBush , он использует этот метод во всем источнике.
-121--3303000-Это не должно быть проблемой, если вы создаете автономную программу с помощью py2exe вы получаете только файлы .pyc.
Обычно вам не нужно указывать python искать файлы .pyc, он делает это в любом случае. Используется только при наличии более нового исходного файла .py.
Однако уровень защиты исходного кода может быть не очень высоким.