Проблема с загрузкой файла win32.pyd на python 2.6
-
10-07-2019 - |
Вопрос
Я не могу заставить py2exe правильно упаковывать даже простой скрипт, использующий win32file Я постоянно получаю следующее сообщение об ошибке:
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 для загрузки win32file из установки python, я могу перезагрузить win32file.pyd для папки dist без ошибки.
Решение
Целью было удалить MSWSOCK.dll это было скопировано в каталог dist py2exe неправильно.
Я использовал procmon и listdll, чтобы проверить, что загружается win32file.pyd при успешном импорте и какие dll загружаются при сбое импорта.Затем, имея список dll-файлов, я проверил, правильно ли они загружены, ie.библиотеки DLL python из папки dist и библиотеки DLL Windows из папки Windows.
Вот setup.py это работает нормально
from distutils.core import setup
import py2exe
setup(console=['dependency_checker.py'],
options={'py2exe': {"dll_excludes": ["mswsock.dll", "MSWSOCK.dll"]}}
)