在py2exe编译代码中动态加载未编译的python插件

Rab*_*ski 6 python plugins dynamic

我的Python应用程序的构造使得某些功能可用作插件.插件架构目前非常简单:我有一个插件文件夹/包,其中包含一些python模块.我加载相关的插件如下:

plugin_name = blablabla
try:
    module = __import__(plugin_name, fromlist='do_something')
except ImportError:
   #some error handling ...
Run Code Online (Sandbox Code Playgroud)

然后执行:

try:
    loans = module.do_something(id_t, pin_t)
except xxx:
    # error handling
Run Code Online (Sandbox Code Playgroud)

我使用py2exe将应用程序编译为Windows二进制文件.这样可以正常工作,除了所有插件都包含在(并且必须包含在二进制文件中)的事实.这不太实用,因为对于每个新插件,我必须重新编译并发布我的应用程序的新版本.如果可以将新插件(即python文件)复制到某个应用程序插件文件夹,并且我的应用程序即时解释文件代码中的Python代码,那会更好.

这样做的最佳方法是什么?

(我已经阅读了所选插件文件的每一行,并对其应用了一个exec语句.但可能有更好的方法......)

Syl*_*rat 0

我建议您使用 pkg_resources entry_points 功能(来自 setuptools/distribute)来实现插件发现和实例化:首先,这是执行此操作的标准方法;其次,它不会遇到您提到的问题。扩展应用程序所需要做的就是将一些插件打包到声明一些入口点的 Egg 中(一个 Egg 可能声明许多插件),当您将该 Egg 安装到 Python 发行版中时,它声明的所有插件都可以自动由您的应用程序发现。你也可以将你的应用程序和“工厂”插件打包到同一个egg中,这非常方便。