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

时间:2018-03-03 11:31:59

标签: python pyinstaller scikit-image

我正在尝试修改Pyinstaller创建的默认.spec文件,以包含隐藏的导入和数据但是每次运行pyinstaller并指定spec文件如pyinstaller source.py spource.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)

我想要完成的是

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 个答案:

答案 0 :(得分:4)

官方方法是先使用makespec.py脚本(随PyInstaller模块提供)创建永久性规范文件(此示例是我的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,然后按照PyInstaller的方式执行以生成exe文件:

"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等)

答案 1 :(得分:1)

阿姆鲁

我也在努力使用spec文件,但我想我知道你的问题的答案。 pyinstaller source.py创建一个默认的spec文件(如果尚不存在)。 pyinstaller source.py将使用source.spec,如果其中一个当前位于您执行pyinstaller source.py命令的同一目录中。如果spec文件可用,您可以执行pyinstaller source.spec,您的构建将使用该spec文件中的值。

答案 2 :(得分:0)

对于仍在努力解决此问题的任何人。我也发生了这种情况,但这是由于人为错误造成的。

当您第一次通过PyInstaller构建项目时,您可能会执行以下操作: pyinstaller mymodule.py

除其他事项外,这将生成.spec文件。如果您编辑此.spec文件并要使用此spec文件构建脚本,请确保将PyInstaller指向该文件。

pyinstaller mymodule.spec

我还建议您在进行更改时备份.spec文件。这样,如果您不小心重用了mymodule.py路径,则可以快速恢复对规范所做的更改。