2009-09-17 6 views
7

Je ne peux pas faire py2exe pour emballer correctement même un script simple qui utilise win32file Je reçois constamment le message d'erreur suivant:problème avec le chargement win32file.pyd sur python 2.6

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 ressemble à suit:

import win32file 
print "Hello world!" 

Et voici le setup.py:

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

Hav E-tu déjà eu un problème similaire?

Versions:

Python 2.6.2, 0.6.9 py2exe, pywin32-214, Windows 7 et Windows XP Pro comme machine cible

MISE À JOUR:

  • je peux courir le programme groupé sur mes fenêtres 7 où il a été créé mais je ne peux pas l'exécuter sur la machine de XP.
  • La partie de win32file.pyc qui jette 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 pendant la boîte de test retours (Windows XP) l'erreur.

** MISE À JOUR 2: **

Lorsque j'utilise imp.load_dynamic pour charger win32file forme d'installation de python je peux recharger le win32file.pyd pour le dossier dist sans l'erreur.

Répondre

9

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

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

Voici le setup.py qui fonctionne très bien

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

mswsock.dll était pas un problème pour moi, mais était powrprof.dll. Donc mes dll_excludes sont maintenant ["mswsock.dll", "POWRPROF.dll"]. Fondamentalement, py2exe ne devrait pas expédier POWRPROF.dll mais utiliser la version de la DLL disponible sur le système. – Jim

+0

ça marche vraiment !! Merci –