为python独立可执行文件创建插件
如何为使用pyInstaller、py2exe或类似工具创建的独立可执行文件创建一个好的插件引擎 我没有使用py2exe的经验,但pyInstaller使用导入钩子从其压缩存储库导入包。当然,我能够动态导入另一个使用pyInstaller创建的压缩存储库并执行代码——这可能是一个简单的插件引擎 当插件(这是动态导入的)使用原始存储库中不存在的库(从未导入)时,会出现问题。这是因为导入钩子用于原始应用程序,并在原始存储库中搜索包,而不是稍后导入的包(插件包存储库)为python独立可执行文件创建插件,python,plugins,py2exe,pyinstaller,Python,Plugins,Py2exe,Pyinstaller,如何为使用pyInstaller、py2exe或类似工具创建的独立可执行文件创建一个好的插件引擎 我没有使用py2exe的经验,但pyInstaller使用导入钩子从其压缩存储库导入包。当然,我能够动态导入另一个使用pyInstaller创建的压缩存储库并执行代码——这可能是一个简单的插件引擎 当插件(这是动态导入的)使用原始存储库中不存在的库(从未导入)时,会出现问题。这是因为导入钩子用于原始应用程序,并在原始存储库中搜索包,而不是稍后导入的包(插件包存储库) 有没有简单的方法来解决这个问题?
有没有简单的方法来解决这个问题?可能存在这样的引擎?编译为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
PyInstaller确实有一个插件系统来处理隐藏的导入,并且附带了一些已经存在的插件系统。请参见网页()中的内容:
PyInstaller的主要目标是与现成的第三方软件包兼容。这意味着,使用PyInstaller,使外部包工作所需的所有技巧都已集成到PyInstaller本身中,因此不需要用户干预。您永远不会被要求在Wiki中查找技巧,并对文件或安装脚本应用自定义修改。检查我们支持的软件包的兼容性列表
我在考虑我的独立应用程序的插件系统。我已经用pyInstaller创建了应用程序。我想为这个应用程序创建插件。问题是当插件导入原始应用程序中未导入的内容时-导入失败。因此,通常最好是:-插件不包含二进制应用程序中已存在的模块-插件包含应用程序中不存在的模块-导入首先尝试从主应用程序导入,如果插件模块失败