5

如何为使用 pyInstaller、py2exe 或类似工具创建的独立可执行文件创建一个好的插件引擎?

我没有使用 py2exe 的经验,但是 pyInstaller 使用导入钩子从它的压缩存储库中导入包。当然,我可以动态导入另一个使用 pyInstaller 创建的压缩存储库并执行代码——这可能是一个简单的插件引擎。

当插件(这是动态导入的)使用原始存储库中不存在的库(从未导入)时会出现问题。这是因为导入钩子用于原始应用程序并在原始存储库中搜索包 - 而不是后来导入的包(插件包存储库)。

有没有简单的方法来解决这个问题?也许存在这样的引擎?

4

2 回答 2

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="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
于 2008-11-21T01:17:47.730 回答
1

PyInstaller确实有一个用于处理隐藏导入的插件系统,并附带了其中的几个。请参阅网页(http://www.pyinstaller.org),其中显示:

PyInstaller 的主要目标是与开箱即用的第 3 方包兼容。这意味着,使用 PyInstaller,使外部包工作所需的所有技巧都已集成在 PyInstaller 本身中,因此无需用户干预。您永远不需要在 wiki 中寻找技巧并对您的文件或设置脚本应用自定义修改。查看我们的 SupportedPackages 兼容性列表。

于 2009-06-05T13:49:24.507 回答