Question

Je ne peux pas créer py2exe pour emballer correctement même un script simple qui utilise win32file Je reçois constamment le message d'erreur suivant:

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.

Le script se présente comme suit:

import win32file
print "Hello world!"

Et voici le fichier setup.py:

from distutils.core import setup
import py2exe
setup(console=['dependency_checker.py'])

Avez-vous déjà eu un problème similaire?

Versions:

Python 2.6.2, py2exe 0.6.9, pywin32-214, Windows 7 et Windows XP Pro en tant qu’ordinateur cible

UPDATE:

  • Je peux exécuter le programme fourni sous Windows 7 où il a été créé, mais je ne peux pas l'exécuter sur l'ordinateur XP.
  • La partie de win32file.pyc qui renvoie l'erreur se présente comme suit:

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

La ligne ci-dessus sur ma boîte de dev (Windows 7) fonctionne correctement tandis que sur une boîte de test (Windows XP) renvoie l'erreur.

** UPDATE 2: **

Lorsque j'utilise imp.load_dynamic pour charger l'installation python du formulaire win32file, je peux alors recharger le fichier win32file.pyd pour le dossier dist sans l'erreur.

Était-ce utile?

La solution

La solution consistait à supprimer MSWSOCK.dll qui avait été copié de manière incorrecte dans le répertoire dist par py2exe.

J'ai utilisé procmon et listdll pour vérifier ce qui est chargé par win32file.pyd lorsque l'importation est réussie et quelles dll sont chargées lorsque l'importation échoue. Puis, ayant la liste des dll, j'ai vérifié si elles sont chargées correctement, c'est-à-dire. Dlls python du dossier dist et dlls Windows du dossier windows.

Voici le fichier setup.py qui fonctionne bien

from distutils.core import setup
import py2exe
setup(console=['dependency_checker.py'],
     options={'py2exe': {"dll_excludes": ["mswsock.dll", "MSWSOCK.dll"]}}
     )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top