Python 2.6でwin32file.pydをロードする際の問題
-
10-07-2019 - |
質問
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"]}}
)
所属していません StackOverflow