我的Python应用程序是这样构造的,一些功能可以作为插件使用。目前的插件架构非常简单:我有一个plugins文件夹/包,其中包含一些python模块。我加载相关插件如下:
plugin_name = blablabla
try:
module = __import__(plugin_name, fromlist='do_something')
except ImportError:
#some error handling ...
然后执行:
^{pr2}$我使用py2exe将应用程序编译为Windows二进制文件。除了所有插件都(而且必须)包含在二进制文件中之外,这一切都很好。这不太实用,因为对于每个新插件,我都必须重新编译并发布应用程序的新版本。如果一个新的插件(即python文件)可以复制到某个应用程序插件文件夹中,并且文件代码中的python代码可以由我的应用程序动态地解释,那就更好了。在
最好的方法是什么?在
(我已经阅读了所选插件文件的每一行,并对其应用^{
PyInstaller也允许您导入外部文件。如果在应用程序上运行它,它将不会将这些文件打包到可执行文件中。然后您必须确保路径是正确的(也就是说,您的应用程序可以在正确的目录中找到磁盘上的模块),并且一切都应该正常工作。在
如果您不介意插件将作为.py文件发布,您可以执行以下操作。把你所有的插件放在一个“plugin”子目录下,然后创建一个空的“yu init_uu.py”。在运行时,它将导入包以及该目录中的所有模块。查看Dive In Python以获取解释。。。但我最后还是用了这个。在
我建议您使用pkg_resources entry_points特性(来自setuptools/distribute)来实现插件发现和实例化:首先,这是一种标准的方法;其次,它不会遇到您提到的问题。要扩展应用程序,您只需将一些插件打包到一个egg中,该egg声明一些入口点(一个egg可能声明许多插件),当您将该egg安装到python发行版中时,它声明的所有插件都可以被应用程序自动发现。你也可以把你的应用程序和“工厂”插件打包到同一个鸡蛋里,这很方便。在
相关问题 更多 >
编程相关推荐