pyinstall通过配置.spec文件引用资源文件
pyinstall可以自动将所有依赖的.py文件连接起来编译成一个可执行exe文件,但是如果在程序中 使用了外部资源,如图片,或者是其它的配置文件的时候。pyinstall直接编译生成的exe文件可能会找不到程序中引用的资源。
这时候我们就需要进入.spec文件中修改对应的配置项,引入我们需要的依赖,下面是.spec文件中的一部分内容,我们今天主要就是通过修改这里的datas来连接外部数据文件
a = Analysis(
['objdictedit.py'], # 主程序或脚本文件的列表。这里只有一个文件 'objdictedit.py'。
pathex=[], # 指定 Python 解释器的搜索路径。这里为空列表,表示使用默认的搜索路径。
binaries=[], # 包含在打包文件中的二进制文件列表。这里没有指定任何二进制文件。
datas=[], # 需要包含在打包中的数据文件列表。
hiddenimports=[], # 需要明确指定的隐藏导入模块列表。这里没有指定任何隐藏导入模块。
hookspath=[], # 钩子文件的路径列表,用于处理特定模块的导入问题。这里为空列表,表示没有额外的钩子路径。
hooksconfig={}, # 钩子配置选项的字典,用于定制导入钩子的行为。这里为空字典,表示没有特定的钩子配置。
runtime_hooks=[], # 运行时钩子列表,这些钩子在运行时修改导入行为。这里为空列表,表示没有运行时钩子。
excludes=[], # 被排除在打包之外的模块列表。这里为空列表,表示没有需要排除的模块。
noarchive=False, # 控制是否将 Python 源代码打包到归档中。这里设置为 False,表示允许将 Python 源代码打包到归档中。
optimize=0, # 优化级别,控制生成的字节码的优化等级。这里设置为 0,表示没有进行任何优化。
)
当我们需要使用根目录中的networkedit.ico
和config
文件夹中的DS-302.prf
,DS-401.prf
文件连接到我编译的exe中时,我们可以像下面这样配置
a = Analysis(
['objdictedit.py'], # 主程序或脚本文件的列表。这里只有一个文件 'objdictedit.py'。
pathex=[], # 指定 Python 解释器的搜索路径。这里为空列表,表示使用默认的搜索路径。
binaries=[], # 包含在打包文件中的二进制文件列表。这里没有指定任何二进制文件。
datas=[
('networkedit.ico', '.'),
('config/DS-302.prf', 'config'),
('config/DS-401.prf', 'config'),
],
hiddenimports=[], # 需要明确指定的隐藏导入模块列表。这里没有指定任何隐藏导入模块。
hookspath=[], # 钩子文件的路径列表,用于处理特定模块的导入问题。这里为空列表,表示没有额外的钩子路径。
hooksconfig={}, # 钩子配置选项的字典,用于定制导入钩子的行为。这里为空字典,表示没有特定的钩子配置。
runtime_hooks=[], # 运行时钩子列表,这些钩子在运行时修改导入行为。这里为空列表,表示没有运行时钩子。
excludes=[], # 被排除在打包之外的模块列表。这里为空列表,表示没有需要排除的模块。
noarchive=False, # 控制是否将 Python 源代码打包到归档中。这里设置为 False,表示允许将 Python 源代码打包到归档中。
optimize=0, # 优化级别,控制生成的字节码的优化等级。这里设置为 0,表示没有进行任何优化。
)
通过上面的配置,然后在命令行运行pyinstaller your_script.spec
,就可以把你的项目连接上这些数据资源了!
结尾再附一个pyinstaller命令的详细链接(个人感觉写的挺好的)https://jdreamheart.com/wiki/dailyrecord/install/py_wxpython_pyInstaller.html
标签:文件,这里,钩子,列表,导入,为空,pyinstall,spec From: https://www.cnblogs.com/xddisme/p/18361427