Создание плагинов для автономных исполняемых файлов Python - PullRequest
5 голосов
/ 21 ноября 2008

как создать хороший движок для плагинов для автономных исполняемых файлов, созданных с помощью pyInstaller, py2exe или аналогичных инструментов?

У меня нет опыта работы с py2exe, но pyInstaller использует ловушку импорта для импорта пакетов из своего сжатого репозитория. Конечно, я могу динамически импортировать другой сжатый репозиторий, созданный с помощью pyInstaller, и выполнить код - это может быть простой механизм плагинов.

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

Есть ли простой способ решить эту проблему? Может быть, существует такой двигатель?

Ответы [ 2 ]

3 голосов
/ 21 ноября 2008

При компиляции в exe у вас будет эта проблема.

Единственный вариант, который я могу придумать, чтобы разрешить пользователям доступ к своим плагинам для использования любой библиотеки python, - это включить все библиотеки в пакет exe.

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

Я использовал только py2exe.

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

Вот пример:

from distutils.core import setup
import py2exe

setup (name = "script2compile",
       console=['script2compile.pyw'],
       version = "1.4",
       author = "me",
       author_email="somemail@me.com",
       url="myurl.com",
       windows = [{
                    "script":"script2compile.pyw",
                    "icon_resources":[(1,"./ICONS/app.ico")]  # Icon file to use for display
                 }],
       # put packages/libraries to include in the "packages" list
       options = {"py2exe":{"packages": [   "pickle",
                                            "csv",
                                            "Tkconstants",
                                            "Tkinter",
                                            "tkFileDialog",
                                            "pyexpat",
                                            "xml.dom.minidom",
                                            "win32pdh",
                                            "win32pdhutil",
                                            "win32api",
                                            "win32con",
                                            "subprocess", 
                                        ]}} 

       )

import win32pdh
import win32pdhutil
import win32api
1 голос
/ 05 июня 2009

PyInstaller имеет систему плагинов для обработки скрытого импорта и поставляется с несколькими из них, которые уже есть. См. Веб-страницу (http://www.pyinstaller.org), которая говорит:

Основная цель PyInstaller - совместимость со сторонними пакетами прямо из коробки. Это означает, что в PyInstaller все необходимые приемы для работы внешних пакетов уже интегрированы в сам PyInstaller, так что пользовательское вмешательство не требуется. Вам никогда не придется искать хитрости в вики и применять пользовательские изменения к своим файлам или сценариям установки. Проверьте наш список совместимости SupportedPackages.

...