2013-03-27 122 views
3

我正在使用cefpython來創建一個簡單的基於HTML5的應用程序。我使用Python和pywin32來繪製一個簡單的窗口並在那裏渲染框架。如何將cefpython編譯爲exe

我想編譯我的.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

我與它周圍亂finaly我用下面的步驟(我使用python2.7)管理: 我進口cefpython像這樣:

從cefpython1進口cefpython_py27作爲cefpython

我py2exe抱怨python32。 DLL沒有找到,因爲我懶惰和CBA混亂__ini__文件和搜索其導入我剛剛添加python32.dll到安裝文件中的選項dll_excludes。 py2exe結束後我也不得不manualy複製這些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文件夾大小。

+0

我給它一個去,謝謝:) – 2013-04-23 15:58:01

+0

這是有益的,但現在我得到wx.version = 2.8.12.1(MSW-Unicode)的 [0808/130201 :錯誤:child_process_launcher.cc(326)]無法啓動子進程 – 2013-08-08 07:40:11

+0

上述問題可以通過複製subprocess.exe來解決(感謝Czarek cefpython創建者的提示)。確保cefpython3文件夾中的其他文件例如cef.pak等,ffmpegsumo.dll等也被複制。 – 2013-08-08 07:59:10

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() 
    ... 
+0

太棒了!我會嘗試一下 – 2013-08-12 12:35:24

+0

嘗試這個,但仍然得到錯誤導入cefpython_py27作爲cefpython – Harry 2013-09-05 07:25:51

4

下面是使用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