3

シンプルな HTML5 ベースのアプリを作成するためにcefpythonを使用しています。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

4 に答える 4

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()
    ...
于 2013-08-12T00:54:04.460 に答える
4

Python 2.7 Win32で私にとってうまくいったのは次のとおりです。デモンストレーションには、cefpython のサンプル フォルダーにある cefsimple.py のサンプルを使用しました。この例を機能させるには win32gui モジュールが必要なので、最初にこれをインストールしてください。

  • cefpython1 パッケージをダウンロードしてインストールしました。
  • cefpython の例のディレクトリから cefsimple.html、cefsimple.py、cefwindow.py、および icon.ico を別のディレクトリにコピーし、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

この例のファイルは、私の Google ドライブ から取得できます。

于 2014-08-24T11:43:07.133 に答える
4

私は最終的に次の手順で管理しました(私は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 フォルダーのサイズが小さいとは思わないでください。

于 2013-04-21T09:32:24.423 に答える