【问题标题】:How to compile cefpython to exe如何将cefpython编译为exe
【发布时间】:2017-10-28 10:49:06
【问题描述】:

我正在使用cefpython 创建一个简单的基于 HTML5 的应用程序。我正在使用 Python 和 pywin32 绘制一个简单的窗口并在那里渲染框架。

我想将我的 .py 编译成 .exe,但我不知道该怎么做。我尝试使用 py2exe,但是当我运行结果时出现错误

Traceback (most recent call last):
  File "myApp.py", line 19, in <module>
  File "cefpython1\__init__.pyc", line 4, in <module>
ImportError: cannot import name cefpython_py27

我尝试在分发目录中复制cefpython_py27.pyd,但似乎没有效果。

谁能帮助我?这真的可行吗?

谢谢。

【问题讨论】:

    标签: python chromium pywin32


    【解决方案1】:

    我最终搞砸了,我通过以下步骤进行了管理(我使用 python2.7): 我像这样导入了cefpython:

    从 cefpython1 导入 cefpython_py27 作为 cefpython

    我的 py2exe 抱怨找不到 python32.dll,因为我很懒,cba 会弄乱__ini__ 文件并搜索它的导入位置,我只是在设置文件的选项中将 python32.dll 添加到 dll_excludes。 py2exe 完成后,我还必须手动将这些文件夹和文件复制到我的 dist 文件夹:

    - C:\Python27(your python path)\Lib\site-packages\cefpython1\locales - whole folder
    - C:\Python27(your python path)\Lib\site-packages\cefpython1\icudt.dll
    

    请注意,DLL 相对较大:icudt.dll = 9.8MB,libcef.dll = 24.3MB,所以不要指望 dist 文件夹的大小。

    【讨论】:

    • 这很有帮助,但现在我得到 wx.version=2.8.12.1 (msw-unicode) [0808/130201:ERROR:child_process_launcher.cc(326)] 无法启动子进程
    • 上述问题可以通过复制subprocess.exe来解决(感谢cefpython的创建者Czarek提供这个技巧)。确保 cefpython3 文件夹中的其他文件,例如cef.pak 等、ffmpegsumo.dll 等也被复制。
    【解决方案2】:

    扩展 hidetr 的答案,在 setup.py 中添加类似这样的内容将复制所需的文件:

    def get_cefpython_path():
        import cefpython1 as cefpython
    
        path = os.path.dirname(cefpython.__file__)
        return "%s%s" % (path, os.sep)
    
    def get_data_files():
        cefp = get_cefpython_path()
        data_files = [('', ['%s/icudt.dll' % cefp,
              '%s/d3dcompiler_43.dll' % cefp,
              '%s/d3dx9_43.dll' % cefp,
              '%s/devtools_resources.pak' % cefp,
              '%s/ffmpegsumo.dll' % cefp,
              '%s/libEGL.dll' % cefp,
              '%s/libGLESv2.dll' % cefp,
              '%s/Microsoft.VC90.CRT.manifest' % cefp,
              '%s/msvcm90.dll' % cefp,
              '%s/msvcp90.dll' % cefp,
              '%s/msvcr90.dll' % cefp]),
            ('locales', ['%s/locales/en-US.pak' % cefp]),
            ]
        return data_files
    
    setup(
        data_file = get_data_files()
        ...
    

    【讨论】:

    • 太棒了!我试试看
    • 尝试这个,但仍然得到错误 import cefpython_py27 as cefpython
    【解决方案3】:

    这就是我使用 Python 2.7 Win32 的方法。我使用了 cefpython 示例文件夹中的 cefsimple.py 示例进行演示。您需要 win32gui 模块才能运行此示例,因此请先安装此模块。

    • Downloaded and installed the cefpython1 pacakage.
    • 将cefsimple.html、cefsimple.py、cefwindow.py 和icon.ico 从cefpython 的示例目录复制到一个单独的目录中,并将cefsimple.py 更改为简单地将cefpython 导入为from cefpython1 import cefpython。基于 __file__ 的模块检测在 py2exe 中不起作用并导致错误,因此我已将其删除(也许有更好的解决方法)。
    • 在包含上述复制文件的文件夹中创建了以下 setup.py:
    
        from setuptools import setup
        import py2exe
        import os
    
        def get_cefpython_path():
            import cefpython1 as cefpython
    
            path = os.path.dirname(cefpython.__file__)
            return "%s%s" % (path, os.sep)
    
        def get_data_files():
            cefp = get_cefpython_path()
            data_files = [('', [
                  '%s/icudt.dll' % cefp,
                  '%s/d3dcompiler_43.dll' % cefp,
                  '%s/d3dx9_43.dll' % cefp,
                  '%s/devtools_resources.pak' % cefp,
                  '%s/ffmpegsumo.dll' % cefp,
                  '%s/libEGL.dll' % cefp,
                  '%s/libGLESv2.dll' % cefp,
                  '%s/Microsoft.VC90.CRT.manifest' % cefp,
                  '%s/msvcm90.dll' % cefp,
                  '%s/msvcp90.dll' % cefp,
                  '%s/msvcr90.dll' % cefp,
                  'icon.ico', 'cefsimple.html']),
                ('locales', ['%s/locales/en-US.pak' % cefp]),
                ]
            return data_files
    
        setup(
            data_files = get_data_files(),
            windows=['cefsimple.py'],
            options={
                "py2exe": {
                    "includes": ["json", "urllib"]
                }
            }
        )
    
    • 然后直接在目录下运行py2exe如下:python setup.py py2exe
    • 您现在可以使用dist/cefsimple.exe 运行生成的应用程序

    您可以获取此示例的文件from my Google Drive

    【讨论】:

      【解决方案4】:

      现在有一个使用 PyInstaller 创建可执行文件的官方示例。在撰写本文时,目前仅支持 Windows 平台。见:

      https://github.com/cztomczak/cefpython/blob/master/examples/pyinstaller/README-pyinstaller.md

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-15
        • 2013-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多