Как убрать зависимость расширений Python от UCRT

Я использую cython чтобы генерировать *.c файлы для последующей компиляции с MS Visual Studio 2017 как C/C++, Все это работает великолепно, с небольшим исключением, что все Python *.lib были динамически связаны. Поскольку моя цель - создать автономный exe-файл (большой размер exe-файла не является проблемой), я хотел бы спросить, можно ли статически связать весь Python *.lib, Я уже пытался указать \MT Опция release и определение всех библиотек Python в Debugger включают в себя.

К сожалению, все мои усилия оказались тщетными, поскольку динамически связанный исполняемый файл не может найти python3.dll при копировании на другой компьютер. В настоящее время я планирую скопировать весь каталог установки Python вместе с исполняемым файлом и указать соответствующие ссылки для включения при компиляции.

Поэтому меня интересует любой вариант, если он существует, для создания автономного переносимого исполняемого файла.

Буду признателен за вашу помощь и советы.

1 ответ

Хаав это правильно.

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

Cython существует по причине. Вы получаете свой код на Python, добавляете несколько изменений и, бэм, ваш код цитонизирован.

Это хорошо по двум причинам. Чтобы запутать код, и это может ускорить код (зависит).

Почему вы не используете Cython и Pyinstaller? Это проверено и проверено. Pyinstaller даже говорит, что поддерживает это. Подход, который вы используете, может быть реализован в теории, но он слишком сложен и даже не нужен.

Возможные проблемы:

Но они не могут украсть мой исходный код? Нет, это цифонизировано, так что да, но не легко.

Я не могу использовать Нуитку? Да, если вы хотите, чтобы он глючил и работал не так, как задумано.

Как насчет библиотек, они не работают на другом компьютере? Spec-файлы существуют по причине. Немного ручной обработки, и это может сработать.

Не могу ли я скомпилировать в C++, а затем сделать его автономным? Посмотрите на количество оставшихся без ответа вопросов и людей, которые не могли заставить его работать. Кроме того, он не нужен, когда существуют pyinstaller и cython и делают одно и то же. Cython широко поддерживается. Такое ощущение, что вы делаете вещи долгим и трудным путем.

Но компиляция в C++ не будет проще. Ни в коем случае, pyinstaller уже делает большую часть работы ног. Возможно, вам придется настроить файл спецификации здесь и там, но в противном случае это единственный путь. Имейте в виду, что он также имеет интеграцию с pyupdater.

Другие вопросы по тегам