7

win32file を使用する単純なスクリプトでさえ、py2exe を正しくパックすることができません。常に次のエラー メッセージが表示されます。

Traceback (most recent call last):
  File "dependency_checker.py", line 1, in <module>
  File "win32file.pyc", line 12, in <module>
  File "win32file.pyc", line 10, in __load
ImportError: DLL load failed: The specified procedure could not be found.

スクリプトは次のようになります。

import win32file
print "Hello world!"

そして、ここに setup.py があります:

from distutils.core import setup
import py2exe
setup(console=['dependency_checker.py'])

以前にも同様の問題がありましたか?

バージョン:

ターゲット マシンとしての Python 2.6.2、py2exe 0.6.9、pywin32-214、Windows 7 および Windows XP Pro

アップデート:

  • バンドルされたプログラムは、それが作成された Windows 7 で実行できますが、XP マシンでは実行できません。
  • エラーをスローする win32file.pyc の部分は次のようになります。

    >>> imp.load_dynamic('win32file', r'C:\test\setup-test\src\dist\win32file.pyd')
    

テスト ボックス (Windows XP) ではエラーが返されますが、開発ボックス (Windows 7) では上記の行が正しく実行されます。

** 更新 2: **

imp.load_dynamic を使用して win32file フォーム python インストールをロードすると、エラーなしで dist フォルダーの win32file.pyd をリロードできます。

4

1 に答える 1

9

解決策は、py2exe によって誤って dist ディレクトリにコピーされた MSWSOCK.dll を削除することでした。

procmon と listdll を使用して、インポートが成功したときに win32file.pyd によって読み込まれるものと、インポートが失敗したときに読み込まれる dll を確認しました。次に、正しくロードされているかどうかを確認したdllのリストを取得します。distフォルダーからのpython dllと、windowsフォルダーからのwindows dll。

これが正常に動作するsetup.pyです

from distutils.core import setup
import py2exe
setup(console=['dependency_checker.py'],
     options={'py2exe': {"dll_excludes": ["mswsock.dll", "MSWSOCK.dll"]}}
     )
于 2009-09-18T14:52:58.870 に答える