我正在尝试修改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)
但是这又重置为上面的默认分析类 非常感谢
答案 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
命令已经在环境路径中,则可以使用它来代替我上面提到的makespec.py
文件。 As stated:
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
路径,则可以快速恢复对规范所做的更改。