Вопрос

Я не могу заставить 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"]}}
     )
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top