2008-11-20 7 views
5

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

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

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

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

ответ

3

При компиляции в 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="[email protected]", 
     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

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

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

+0

Я думал о системе плагинов для своего автономного приложения. У меня есть приложение, созданное с помощью pyInstaller. Я хочу создать плагины для этого приложения. Проблема заключается в том, что плагин импортирует что-то, что не было импортировано в исходное приложение - импорт невозможен. – uhz 2009-06-08 19:27:37