pyinstaller不会使用--onefile捆绑pyd和dll文件

时间:2014-08-24 14:55:47

标签: python pyinstaller chromium-embedded cefpython

我尝试使用pyinstaller将cefpython1应用程序捆绑到单个exe中。 我有一个工作的spec文件,它为cefpython1示例创建了一个distrubiton,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')

可以找到项目文件on my Google Drive。不要关心setup.py,它包含py2exe构建,我正在pyinstaller旁边玩。你需要Python 2.7,Win32gui,cefpython1,当然还有pyinstaller包来运行它,我只用Win32版测试了这个!我甚至尝试安装开发pyinstaller,如果它做了任何改变。

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

使用简单的Hello World python文件测试--onefile,它确实可以正常工作。导致pyinstaller没有创建单个exe的原因是什么? build log并没有显示任何有趣的内容,但有些内容我在warning file中无法理解。例如。它说没有名为cefpython1.cefpython的模块,但是正确的pyd被复制到dist目录并且应用程序仍在运行。

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

1 个答案:

答案 0 :(得分:0)

  

我正在使用的命令是:std::vector

     

使用简单的Hello World python文件测试了--onefile,它确实   这样工作。是什么导致pyinstaller无法创建单个exe?

键入pyinstaller --onefile cefsimple.spec时,选项-onefile 将被忽略,因为.spec已经定义了获取目录还是独立文件。具有COLLECT函数的.spec文件将构成整个pyinstaller --onefile cefsimple.spec目录。

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