在PyInstaller中使用带有.spec的--onefile

时间:2017-11-06 18:22:14

标签: python pyinstaller

我正在使用.spec文件使用PyInstaller“编译”程序。我正在使用.spec文件,因为我需要在程序中包含一个额外的文件。当我尝试deleteButton.setOnAction(e -> { String s = "DELETE: "; s += receipt.getSelectedText(); receipt.replaceSelection(s); }); 时,它仍会在PyInstaller --onefile Prog.spec中创建一个文件夹,其中所有文件都是分开的,而不是像我期望的那样制作单个文件。如果我dist那么它会在PyInstaller --onefile Prog.py中生成一个.exe文件,这就是我想要的。使用.spec文件时,我需要做些什么吗?

3 个答案:

答案 0 :(得分:11)

使用pyi-makespec --onefile yourprogram.py为onefile模式生成样本规范文件。

https://pythonhosted.org/PyInstaller/man/pyi-makespec.html

没有COLLECT呼叫,EXE呼叫也不同。例如:

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='main',
          debug=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )

答案 1 :(得分:5)

您可以在命令行中添加额外文件,而不是编辑规范文件:

pyinstaller --onefile --add-data <SRC;DEST or SRC:DEST> yourfile.py

否则,请确保在spec文件中没有收集步骤:

&#34;在单文件模式下,没有调用COLLECT,EXE实例接收所有脚本,模块和二进制文件。&#34;

https://pyinstaller.readthedocs.io/en/stable/usage.html了解有关命令行标志的更多信息。

如果问题仍然存在,这也可以提供一些见解:Bundling data files with PyInstaller (--onefile)

答案 2 :(得分:0)

要修改 .spec 文件,请将 binarie=[] 更改为 binaries=None

a = Analysis(
        ...
        binaries=None,
        ...
    )

我知道这看起来是无稽之谈,但它确实有效!

4.3 版