更新Pyinstaller的.Spec文件会被重置

9

我试图修改由Pyinstaller创建的默认.spec文件,以包含隐藏的导入和数据。但是每次运行pyinstaller并指定spec文件 (如: pyinstaller source.py source.spec),我的source.spec会被重置为其默认状态。

a = Analysis(['source.py'],
pathex=['C:\\PATHTOSOURCE'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)

我想要实现的目标是什么?


需要翻译的内容涉及IT技术。
from PyInstaller.utils.hooks import collect_data_files, collect_submodules
Mydatas = collect_data_files("skimage.io._plugins")
Myhiddenimports = collect_submodules('skimage.io._plugins')

a = Analysis(['source.py'],
pathex=['C:\\PATHTOSOURCE'],
binaries=[],
datas=Mydatas,
hiddenimports=Myhiddenimports,
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)

但是这会再次重置为上面的默认分析类。 非常感谢。
3个回答

29

针对那些仍然遇到这个问题的人。我也曾经遇到过同样的问题,但是那是由于人为错误造成的。

当你首次通过PyInstaller构建项目时,你可能会像这样做: pyinstaller mymodule.py

这将生成.spec文件等内容。 如果你编辑了此.spec文件并想使用此文件来构建脚本,请确保将PyInstaller指向该文件。

pyinstaller mymodule.spec

我还建议在更改.spec文件时备份该文件。 这样,如果你意外重用了mymodule.py路径,可以快速恢复所做的更改。


4
官方的方法是使用makespec.py脚本(随PyInstaller模块提供)先创建永久的spec文件(这个例子是我的Windows系统,你需要修改你的系统中的Python路径),传递与PyInstaller选项相同的选项(如果makespec.py路径在未来更改,请尝试从PyInstaller模块路径开始查找文件):
"c:\Program Files\Python38\python.exe" "c:\Program Files\Python38\Lib\site-packages\PyInstaller\utils\cliutils\makespec.py" -F --noconsole --icon=example_small.ico example.py

然后按照您的意愿编辑生成的文件example.spec,然后执行以下操作以生成exe文件,就像PyInstaller一样:

"c:\Program Files\Python38\python.exe" -m PyInstaller example.spec 

在未来,您只需重新运行上面的第二个命令即可在修改Python代码后生成新的exe文件。但有时(例如导入新库),您需要编辑example.spec文件,可以通过以下两种方式之一进行编辑:
  • 编辑example.spec文件,然后重新运行第二个命令
  • 编辑第一个命令选项,然后重新运行两个命令。当然,example.spec文件将被第一个命令替换。如果您之前手动编辑过example.spec文件,请先备份example.spec文件,这样在重新生成example.spec文件后,您可以通过参考备份文件来编辑example.spec文件。
更多信息:

pyi-makespec用于创建规范文件。请参阅使用规范文件。

如果您没有执行完整的安装(通过使用pip或执行setup.py),那么这些命令将不会被安装为命令。但是,您仍然可以通过运行在分发文件夹中找到的Python脚本来执行下面文档中记录的所有功能。 pyinstaller命令的等效项是pyinstaller-folder/pyinstaller.py。其他命令可以在pyinstaller-folder/cliutils/中找到,具有有意义的名称(例如makespec.py)。

2

我也在苦恼spec文件,但我认为我知道你的问题的答案。当你执行pyinstaller source.py命令时,如果不存在spec文件,pyinstaller会创建一个默认的spec文件。如果当前目录中有source.spec文件,pyinstaller source.py将使用该spec文件。如果有spec文件可用,你可以执行pyinstaller source.spec,然后你的构建将使用spec文件中的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接