Создание плагинов для автономных исполняемых файлов Python
-
08-07-2019 - |
Вопрос
Как создать хороший движок для плагинов для автономных исполняемых файлов, созданных с помощью 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. Р>