【问题标题】:Pyinstaller 3.5 will not generate a standalone executablePyinstaller 3.5 不会生成独立的可执行文件
【发布时间】:2019-12-19 06:47:35
【问题描述】:

我正在尝试让 Pyinstaller 3.5 创建一个“onefile”可执行文件,但它一直在生成一个“onedir”。

我的文件都在一个目录中。有一个主程序导入了另外两个模块,而这两个模块又导入了第三个模块。该程序在 Python 3.7.4 中直接运行时可以正常运行。 Pyinstaller 生成的“onedir”版本也可以使用。我在 Surface Book 2 上运行 64 位 Windows 10 Pro。

我用来生成文件的命令是:

pyinstaller --onefile --windowed --additional-hooks-dir=. qualys_admin.spec

我的程序使用 wx、pubsub、xmltodict、requests 和 pandas。附加的钩子文件用于 xlrd,pandas 需要读取 xlsx 文件。

我的规范文件如下所示:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

# work-around for https://github.com/pyinstaller/pyinstaller/issues/4064
import distutils
if distutils.distutils_path.endswith('__init__.py'): 
    distutils.distutils_path = os.path.dirname(distutils.distutils_path)

addedfiles = ('qualys_admin.ini', '.')

a = Analysis(['qualys_admin.py'],
             pathex=['C:\\Users\\secops-sw\\Documents\\qualys- 
administration\\qualysadmin'],
             binaries=[],
             datas=[addedfiles],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
         cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='qualys_admin',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='qualys_admin')

我编写了一个小小的“hello world”程序来消除程序的复杂性。我能够成功生成“onedir”和“onefile”。所以我知道在哪里可以找到独立的可执行文件。

对于我的 qualys_admin 应用程序,该可执行文件肯定没有生成,我找不到任何警告来说明原因。

有人有什么想法吗?

【问题讨论】:

  • 尝试pyinstaller --onefile <your_file_name.py>首先创建一个为onefile配置的规范文件,然后删除创建的其他文件夹并在规范文件中进行必要的更改,然后运行-pyinstaller --onefile --windowed --additional-hooks-dir=. qualys_admin.spec
  • 为 --onefile 重新创建规范文件是我所缺少的。我按照您的建议做了,并且能够生成一个运行良好的独立可执行文件。谢谢!

标签: python pyinstaller


【解决方案1】:

它不起作用,因为您的规范文件配置为一种目录模式。您需要使用一个文件标志创建规范文件。

pyi-makespec --onefile yourscript.py 

然后您可以修改您的规格表并使用自定义规格表构建应用程序。

【讨论】:

  • 这似乎是对先前建议的一种变体,我相信它也会起作用,并且通过避免初始生成可执行文件可能会花费更少的时间。我也会试试这个。也谢谢你。
  • 是的,这是只生成规格表的正确方法。
猜你喜欢
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多