Могу ли я использовать zipimport для доставки встроенного питона? - PullRequest
2 голосов
/ 08 июля 2010

В настоящее время я развертываю полный дистрибутив python (оригинальный python 2.7 msi) с моим приложением. Который является встроенным веб-сервером, созданным с помощью Delphi.

Читая это , мне интересно, возможно ли встроить необходимые файлы Python в мое приложение, чтобы уменьшить загрузку файлов и избежать конфликта с несколькими версиями Python.

У меня есть предыдущий опыт работы с python для delphi , поэтому мне нужно только знать, будет ли работать только доставка python dll + zip с собственными скриптами distro + (и если существуют какие-либо предупреждения, которые я должен знать образец, где я могу посмотреть)

Ответы [ 2 ]

3 голосов
/ 08 июля 2010

zipimport для вас должно работать нормально - я не знаком с Python для Delphi, но сомневаюсь, что он отключает эту функцию (приложение для встраивания может сделать это, но это необычный выбор).Просто помните, что то, что вы можете заархивировать и импортировать напрямую, это модули с Python-кодированием (или просто соответствующие им .pyc или .pyo байт-коды) - библиотеки DLL (даже если они переименованы в .pyd s ;-)на диске для загрузки (поэтому, если у вас есть zip-файл с ним, его нужно будет разархивировать при запуске приложения, например, во временный каталог).

Более того, вам даже не нужно архивироватьup все модули, только те, которые вам действительно нужны (путем транзитивного замыкания) - и вы можете легко узнать, какие именно это модули, с помощью модуля modulefinder стандартной библиотеки Python.Пример на странице документации, на которую я только что указал, должен прояснить ситуацию.Счастливого молнии!

0 голосов
/ 19 апреля 2011

Да, это возможно.

На самом деле я пишу скрипт автоматизации на Python с Zipimport library. На самом деле я включил все .py файлы в мои zip, а также файлы конфигурации или xml, необходимые для этого сценария.

Затем я вызываю файл .command, нацеленный на класс __main__.py, который перенаправляет на нужный скрипт в соответствии с моими sys.argv параметрами, что действительно полезно!

...