3

我正在尝试使用pyinstaller 将cefpython1应用程序捆绑到单个 exe 中。我有一个工作规范文件,它为 cefpython1 示例 cefsimple 创建了一个分布:

# -*- mode: python -*-

def get_cefpython_path():
    import cefpython1 as cefpython

    path = os.path.dirname(cefpython.__file__)
    return "%s%s" % (path, os.sep)

cefp = get_cefpython_path()

a = Analysis(['cefsimple.py'],
             hiddenimports=["json.decoder", "json.scanner", "json.encoder"])
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          exclude_binaries=True,
          name='cefsimple.exe',
          debug=False,
          strip=None,
          upx=False,
          console=False )
coll = COLLECT(exe,
               a.binaries + [('icudt.dll', '%s/icudt.dll' % cefp, 'BINARY')],
               a.zipfiles,
               a.datas + [('locales/en-US.pak', '%s/locales/en-US.pak' % cefp, 'DATA'), ('cefsimple.html', 'cefsimple.html', 'DATA'), ('icon.ico', 'icon.ico', 'DATA')],
               strip=None,
               upx=False,
               name='cefsimple')

项目文件可以在我的 Google Drive 上找到。不要关心 setup.py,它包含我在 pyinstaller 旁边玩的 py2exe 构建。你需要 Python 2.7、Win32gui、cefpython1,当然还有 pyinstaller 包来运行它,我只用 Win32 版本测试过它!如果有任何更改,我什至尝试安装开发 pyinstaller。

如果我尝试使用 --onefile 属性执行 pyinstaller 似乎没有任何变化,pyinstaller 只是在 dist 下创建分发目录。我正在使用的命令是:pyinstaller --onefile cefsimple.spec

用一个简单的 Hello World python 文件测试了 --onefile ,它确实可以工作。是什么导致 pyinstaller 不创建单个 exe?构建日志没有显示任何有趣的内容,但在警告文件中有一些我不明白的东西。例如。它说没有名为 cefpython1.cefpython 的模块,但是正确的 pyd 被复制到 dist 目录并且应用程序仍然可以工作。

以下是在 dist/ 下创建的文件列表:cefsimple.lst也许这有助于发现问题。

4

1 回答 1

1

我正在使用的命令是:pyinstaller --onefile cefsimple.spec

用一个简单的 Hello World python 文件测试了 --onefile ,它确实可以工作。是什么导致 pyinstaller 不创建单个 exe?

键入时忽略选项--onefilepyinstaller --onefile cefsimple.spec ,因为 .spec 已经定义了您将获得目录还是独立文件。具有 COLLECT 功能的 .spec 文件将创建一个完整的dist目录。

pyi-makespec --onefile cefsimple.py我建议通过键入并添加您的各种修改(数据、二进制文件、隐藏导入...)来重新制作一个新的 .spec 文件,然后尝试pyinstaller cefsimple.spec不带选项。这适用于我的 pyinstaller 3.3.1。

于 2018-07-18T11:11:55.930 回答