Проблема с загрузкой win32file.pyd на python 2.6 - PullRequest
7 голосов
/ 17 сентября 2009

Я не могу заставить 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 в качестве целевой машины

UPDATE:

  • Я могу запустить связанную программу на моем Windows 7, где она была создана, но я не могу запустить ее на компьютере с XP.
  • Часть win32file.pyc, которая выдает ошибку, выглядит следующим образом:

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

Строка выше на моем устройстве dev (windows 7) работает правильно, в то время как на тестовом окне (windows XP) возвращает ошибку.

** ОБНОВЛЕНИЕ 2: **

Когда я использую imp.load_dynamic для загрузки win32file формы Python, я могу перезагрузить win32file.pyd для папки dist без ошибки.

1 Ответ

9 голосов
/ 18 сентября 2009

Задачей было удалить MSWSOCK.dll, которая была неправильно скопирована в каталог dist с помощью py2exe.

Я использовал procmon и listdll, чтобы проверить, что загружается win32file.pyd при успешном импорте, и какие dll загружаются при сбое импорта. Затем, имея список DLL я проверил, правильно ли они загружены, т.е. DLL-библиотеки Python из папки dist и Windows-библиотеки из папки Windows.

Вот setup.py, который отлично работает

from distutils.core import setup
import py2exe
setup(console=['dependency_checker.py'],
     options={'py2exe': {"dll_excludes": ["mswsock.dll", "MSWSOCK.dll"]}}
     )
...