6

pywin32 を使用する簡単なプログラムを作成しました。実行可能ファイルとしてデプロイしたいので、py2exeしました。また、膨大な量のファイルが必要なかったので、1 に設定bundle_filesしました (すべてをまとめてバンドルすることを意味します)。ただし、実行しようとすると、次のようになります。

Traceback (most recent call last):
  File "pshelper.py", line 4, in <module>
  File "zipextimporter.pyc", line 82, in load_module
  File "win32.pyc", line 8, in <module>
  File "zipextimporter.pyc", line 98, in load_module
ImportError: MemoryLoadLibrary failed loading win32ui.pyd

私のセットアップ スクリプトでは、オプションとしてpackages=["win32ui"]andを実行しようとincludes=["win32ui"]しましたが、それは役に立ちませんでした。py2exe に win32ui.pyd を含めるにはどうすればよいですか?

ファイルをバンドルするように依頼しなければこの問題は発生しないので、今のところはバンドルできますが、適切に機能させる方法を知りたいです。

4

4 に答える 4

1

問題は win32ui.pyd が含まれていないことですか? スタック トレースは wiki に記載されているものとまったく同じではありませんが、http://www.py2exe.org/index.cgi/Py2exeAndWin32ui を確認してください

于 2010-07-30T14:42:47.267 に答える
1

これまでのところ最も効果的な回避策は、ctypes を使用して pywin32 関数を単純に再実装することです。別の .pyd または .dll ファイルを必要としないため、問題は解消されます。

于 2013-11-09T01:24:18.657 に答える
-1

psutil を py2exe にバンドルしようとすると、同じ問題が発生します。これが私がこれまでに見つけたものです。

Traceback (most recent call last):
  File "wx_gui.py", line 43, in <module>
  File "zipextimporter.pyc", line 82, in load_module
  File "psutil\__init__.pyc", line 85, in <module>
  File "zipextimporter.pyc", line 82, in load_module
  File "psutil\_psmswindows.pyc", line 15, in <module>
  File "zipextimporter.pyc", line 98, in load_module
ImportError: MemoryLoadLibrary failed loading _psutil_mswindows.pyd

bundle_files = 3 のときにこのトレースバックが発生します。zipfile が指定されているか、None である可能性がありますが、それでも問題が発生します。

最初に、このページのために、これが欠落している dll であると考えました: http://www.py2exe.org/index.cgi/ProblemsToBeFixed

Python27 で見つけたすべての dll を実行可能ファイルと同じディレクトリにコピーし、そのディレクトリ パスを os.environ['path'] に追加しました。それはうまくいきませんでした。

次に、パッケージを site-packages から直接インポートしようとしました。

コンパイルされた実行可能ファイルの sys.path 全体を通常の sys.path に置き換えました

sys.path = [r'C:\Python27\Lib\idlelib', ...]

.pyd モジュールがインポートされたと思いますが、Visual C++ から次の非常に見苦しいエラー メッセージが表示されました。

Runtime Error!
Program: {path}.exe
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

sys.path 全体を置き換えて、機能しているかどうかを確認することをお勧めします。そうである場合は、単一の実行可能ファイルで必要なモジュールを一時ディレクトリに書き込み、それをパスに追加することができます。そうでなければ、この問題は解決が難しいと思います。

于 2013-11-15T03:12:23.613 に答える