Развертывание приложения с Python или другим встроенным языком сценариев - PullRequest
18 голосов
/ 15 февраля 2009

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

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

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

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

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

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

edit2:

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

Ответы [ 4 ]

18 голосов
/ 15 февраля 2009

Свяжите свое приложение с библиотекой 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 в модуле zipfile.

8 голосов
/ 15 февраля 2009

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

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

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

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

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

5 голосов
/ 15 февраля 2009

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

0 голосов
/ 15 февраля 2009

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

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

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

...