質問

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 7)の上の行は正しく実行されますが、テストボックス(windows XP)ではエラーが返されます。

**更新2:**

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

役に立ちましたか?

解決

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

インポートが成功したときにwin32file.pydによってロードされるものと、インポートが失敗したときにロードされるdllを確認するためにprocmonとlistdllを使用しました。その後、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"]}}
     )
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top