Создание плагинов для автономных исполняемых файлов Python

StackOverflow https://stackoverflow.com/questions/307338

Вопрос

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

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

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

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

Это было полезно?

Решение

При компиляции в 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

Другие советы

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

  

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top