如何编译cefpython到exe

时间:2013-03-27 20:17:19

标签: python chromium pywin32

我使用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,但似乎没有效果。

任何人都可以帮助我吗?这有可能吗?

感谢。

4 个答案:

答案 0 :(得分:4)

我最终搞砸了它,我完成了以下步骤(我使用python2.7): 我像这样导入了cefpython:

从cefpython1导入cefpython_py27作为cefpython

我的py2exe抱怨找不到python32.dll,因为我懒得和cba混淆__ini__文件并搜索导入的地方我刚刚将python32.dll添加到设置文件中的选项中的dll_excludes。 py2exe完成后,我还必须手动将这些foler和文件复制到我的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文件夹大小。

答案 1 :(得分:4)

扩展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()
    ...

答案 2 :(得分:4)

这对我来说对Python 2.7 Win32有用。我已经使用了cefpython示例文件夹中的cefsimple.py示例进行演示。您需要win32gui模块才能使用此示例,因此请先安装它。

  • Downloaded and installed the cefpython1 pacakage.
  • 将cefpython的示例目录中的cefsimple.html,cefsimple.py,cefwindow.py和icon.ico复制到一个单独的目录中,并将cefsimple.py更改为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

答案 3 :(得分:1)

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

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

enter image description here