Как создать приложение, которое встраивает и выполняет код Python без локальной установки Python?

Привет коллеги - разработчики программного обеспечения.

Я хочу распределить программу C, которая scriptable путем встраивания интерпретатора Python.
Программа C использует Py_Initialize, PyImport_Import и так далее для выполнения встраивания Python.

Я ищу решение, где я распределяю только следующие компоненты:

  • мой исполняемый файл программы и его библиотеки
  • библиотека Python (dll/so)
  • zip-файл, содержащий все необходимые модули Python и библиотеки.

Как я могу выполнить это? Существует ли пошаговый рецепт для этого?

Решение должно подойти и для Windows и для Linux.

Заранее спасибо.

10
задан Rex Logan 23 March 2010 в 13:35
поделиться

5 ответов

Вы смотрели официальную документацию Python: Встраивание Python в другое приложение ?

Там также есть очень хороший PDF-файл от IBM: Встроить Python скриптинг в приложении C .

Вы должны иметь возможность делать то, что хотите, используя эти два ресурса.

6
ответ дан 3 December 2019 в 23:49
поделиться

Вы смотрели Portable Python ? Не нужно ничего устанавливать. Просто скопируйте включенные файлы, чтобы использовать интерпретатор.

Изменить: это решение только для Windows.

1
ответ дан 3 December 2019 в 23:49
поделиться

Вы смотрели на Встраивание Python в другое приложение в документации Python?

После этого вы можете использовать ловушка import (см. PEP 302 ), чтобы ваш встроенный код Python загружал модули из любого места по вашему выбору. Однако, если у вас все в одном zip-файле, вам, вероятно, просто нужно сделать его единственной записью в sys.path .

1
ответ дан 3 December 2019 в 23:49
поделиться

Я просто протестировал свой исполняемый файл на компьютере, на котором не установлен Python, и он заработал.

Когда вы связываете Python со своим исполняемым файлом (независимо от того, является ли он динамическим или статическим), ваш исполняемый файл уже получает базовую функциональность языка Python (операторы, методы, базовые структуры, такие как строка, список, кортеж, dict и т. Д.) БЕЗ какой-либо другой зависимости.

Затем я позволил Python setup.py скомпилировать исходный код Python через python setup.py sdist --format = zip , который дал мне ZIP-файл, который я назвал pylib-2.6.4.zip .

Мои дальнейшие шаги были следующими:

char pycmd[1000]; // temporary buffer for forged Python script lines
...
Py_NoSiteFlag=1;
Py_SetProgramName(argv[0]);
Py_SetPythonHome(directoryWhereMyOwnPythonScriptsReside);
Py_InitializeEx(0);

// forge Python command to set the lookup path
// add the zipped Python distribution library to the search path as well
snprintf(
    pycmd,
    sizeof(pycmd),
    "import sys; sys.path = ['%s/pylib-2.6.4.zip','%s']",
    applicationDirectory,
    directoryWhereMyOwnPythonScriptsReside
);

// ... and execute
PyRun_SimpleString(pycmd);

// now all succeeding Python import calls should be able to
// find the other modules, especially those in the zipped library

...
4
ответ дан 3 December 2019 в 23:49
поделиться

Есть программа под названием py2exe. Я не знаю, доступно ли это только для Windows. Кроме того, последняя версия, которую я использовал, не упаковывает все в один файл .exe. Он создает кучу вещей, которые необходимо распространить - zip-файл и т. Д.

0
ответ дан 3 December 2019 в 23:49
поделиться
Другие вопросы по тегам:

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