为 python 独立可执行文件创建插件
如何为使用 pyInstaller、py2exe 或类似工具创建的独立可执行文件创建一个好的插件引擎?
我没有使用 py2exe 的经验,但 pyInstaller 使用导入钩子从其压缩存储库导入包。 当然,我可以动态导入另一个用 pyInstaller 创建的压缩存储库并执行代码 - 这可能是一个简单的插件引擎。
当插件(这是动态导入的)使用原始存储库中不存在的库(从未导入)时,就会出现问题。 这是因为导入挂钩适用于原始应用程序,并在原始存储库中搜索包 - 而不是后来导入的包(插件包存储库)。
有没有简单的方法来解决这个问题? 也许存在这样的引擎?
how to create a good plugin engine for standalone executables created with pyInstaller, py2exe or similar tools?
I do not have experience with py2exe, but pyInstaller uses an import hook to import packages from it's compressed repository. Of course I am able to import dynamically another compressed repository created with pyInstaller and execute the code - this may be a simple plugin engine.
Problems appears when the plugin (this what is imported dynamically) uses a library that is not present in original repository (never imported). This is because import hook is for the original application and searches for packages in original repository - not the one imported later (plugin package repository).
Is there an easy way to solve this problem? Maybe there exist such engine?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当编译成exe时,你会遇到这个问题。
我能想到的允许用户使用他们的插件访问以使用任何 python 库的唯一选择是将所有库包含在 exe 包中。
将支持的库限制为一个子集,并将其列在文档中可能是个好主意。 由你决定。
我只用过py2exe。
在 py2exe 中,您可以指定在 setup.py 文件中搜索中未找到的库。
这是一个示例:
When compiling to exe, your going to have this issue.
The only option I can think of to allow users access with thier plugins to use any python library is to include all libraries in the exe package.
It's probably a good idea to limit supported libraries to a subset, and list it in your documentation. Up to you.
I've only used py2exe.
In py2exe you can specify libraries that were not found in the search in the setup.py file.
Here's a sample:
PyInstaller 确实有一个用于处理隐藏导入的插件系统,并且附带了其中几个已经存在的插件系统。请参阅网页 (http://www.pyinstaller.org) 上面写着:
PyInstaller does have a plugin system for handling hidden imports, and ships with several of those already in. See the webpage (http://www.pyinstaller.org) which says: