Скомпилировать интерпретатор Python статически?

using System.IO;

string[] filePaths = Directory.GetFiles(@"c:\MyDir\");

foreach (string filePath in filePaths)

File.Delete(filePath);
42
задан Andrew Medico 31 July 2014 в 16:33
поделиться

3 ответа

Я обнаружил это (в основном, касающееся статической компиляции модулей Python):

Здесь описывается файл, используемый для конфигурации, расположенный здесь:

<Python_Source>/Modules/Setup

Если этого файла нет, его можно создать, скопировав:

<Python_Source>/Modules/Setup.dist

Файл Setup содержит тонны документации и README , включенный в исходный код, также предлагает много хорошей информации о компиляции.

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

Обновление

Чтобы получить чисто статический исполняемый файл python, вы также должны настроить следующим образом:

./configure LDFLAGS="-static -static-libgcc" CPPFLAGS="-static"

После сборки с включенными этими флагами вы, вероятно, получите много предупреждения о "переименовании из-за отсутствия библиотеки" s звездочка / звездочка слово «статический» и звездочка без пробелов)

б) раскомментируйте все модули, которые должны быть доступны статически (например, математика, массив и т. д.)

Вам также может потребоваться добавить определенные флаги компоновщика (как указано в ссылке, которую я разместил выше). По моему опыту, библиотеки работают без изменений.

Также может быть полезно запустить make следующим образом:

make 2>&1 | grep 'renaming'

Это покажет все модули, которые не компилируются из-за статической компоновки.

s звездочка / звездочка слово «статический» и звездочка без пробелов)

б) раскомментируйте все модули, которые должны быть доступны статически (например, математика, массив и т. д.)

Вам также может потребоваться добавить определенные флаги компоновщика (как указано в ссылке, которую я разместил выше). По моему опыту, библиотеки работают без изменений.

Также может быть полезно запустить make следующим образом:

make 2>&1 | grep 'renaming'

Это покажет все модули, которые не компилируются из-за статической компоновки.

31
ответ дан 26 November 2019 в 23:57
поделиться

Using freeze doesn't prevent doing it all in one run (no matter what approach you use, you will need multiple build steps - e.g. many compiler invocations). First, you edit Modules/Setup to include all extension modules that you want. Next, you build Python, getting libpythonxy.a. Then, you run freeze, getting a number of C files and a config.c. You compile these as well, and integrate them into libpythonxy.a (or create a separate library).

You do all this once, for each architecture and Python version you want to integrate. When building your application, you only link with libpythonxy.a, and the library that freeze has produced.

6
ответ дан 26 November 2019 в 23:57
поделиться

Вы можете попробовать ELF STATIFIER . Я использовал его раньше, и он работает довольно хорошо. У меня были проблемы с этим в нескольких случаях, и затем мне пришлось использовать другую аналогичную программу под названием Ermine . К сожалению, это коммерческая программа.

3
ответ дан 26 November 2019 в 23:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: