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

Я думаю об использовании Python в качестве встроенного языка сценариев в хобби-проекте, написанном на C++. Я не хотел бы зависеть от отдельно установленного дистрибутива Python. Документация Python, кажется, достаточно ясна в отношении общего использования, но я не смог найти четкого ответа на этот вопрос.

Возможно ли развернуть интерпретатор Python + стандартную библиотеку с моим приложением? Какой другой язык, как Lua, Javascript (Spidermonkey), Ruby и т. Д., Будет лучше для этого использования?

Вот критерии, с которыми я сравниваю разные языки:

  • Нет / мало зависимостей от внешних установленных пакетов
  • Стандартная библиотека с хорошим набором функций
  • Хороший язык:)
  • Не приводит к огромному установочному пакету

редактировать:

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

edit2:

Еще одно уточнение. Мне не нужна информация о специфике связывания кода C и Python.

4 ответа

Решение

Свяжите свое приложение с библиотекой python (pythonXX.lib в Windows) и добавьте следующее в свою функцию main().

Py_NoSiteFlag = 1;  // Disable importing site.py
Py_Initialize();    // Create a python interpreter

Поместите нужные биты стандартной библиотеки python в zip-файл (называемый pythonXX.zip) и поместите его и pythonXX.dll рядом с исполняемым файлом, который вы распространяете. Взгляните на PyZipFile в модуле zip file.

Процесс встраивания полностью документирован: встраивание Python в другое приложение. В документах предлагается несколько уровней, на которых выполняется встраивание, выберите то, что наилучшим образом соответствует вашим требованиям.

Простую демонстрацию встраивания Python можно найти в каталоге Demo / embed / исходного дистрибутива.

Демо здесь, должно быть в состоянии построить из дистрибутива.

  • Очень высокий уровень вложения
  • Вне очень высокого уровня вложения: обзор
  • Чистое вложение
  • Расширение встроенного Python
  • Встраивание Python в C++

В стандартной библиотеке вы можете выбрать компоненты, которые не несут слишком много зависимостей.

Чтобы расширить ответ с помощью gimel, ничто не мешает вам отправить python.dll, использовать его и установить правильный PYTHONPATH, чтобы использовать собственную установку стандартной библиотеки python. Это просто библиотеки и файлы, и ваш процесс установки может справиться с ними как таковой.

Если вы ищете способ простого развертывания приложения Python, вы можете использовать Py2Exe. Это позволило бы вашему приложению получить все необходимые ему зависимости, не беспокоясь о том, что установлено или не установлено на компьютере пользователя.

[Edit] Если Py2Exe не используется для встроенных приложений, можете ли вы просто попросить установщика проверить наличие соответствующих файлов и загрузить / установить все, что отсутствует? [/ Edit]

[Edit2] Может ли Элмер быть тем, что вы ищете? [/Edit2]

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