2009-09-17 70 views
7

我不能讓py2exe收拾即使正確使用win32file 我經常收到以下錯誤消息的簡單腳本:問題與裝載win32file.pyd 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. 

腳本看起來如下:

import win32file 
print "Hello world!" 

這裏是setup.py:

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

HAV你有過類似的問題嗎?

版本:

的Python 2.6.2,py2exe 0.6.9,pywin32-214,Windows 7和Windows XP專業版作爲目標機器

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形式蟒安裝然後我可以重新加載爲dist文件夾的win32file.pyd而不會出現錯誤。

回答

9

解決方法是刪除由py2exe被錯誤地複製到dist目錄中的MSWSOCK.dll。

我已經使用procmon和listdll來檢查什麼是加載的win32file.pyd當導入是成功和什麼DLL導入失敗時加載。然後有我已經檢查,如果他們正確加載DLL的列表即。來自dist文件夾的python dll和windows文件夾中的windows dll。

這裏是工作正常

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

mswsock.dll是不是一個問題,我的setup.py,但POWRPROF.dll了。所以我的dll_excludes現在是[「mswsock.dll」,「POWRPROF.dll」]。基本上,py2exe不應該運送POWRPROF.dll,而是使用系統上可用的dll版本。 – Jim 2014-01-24 15:55:17

+0

真的有效!謝謝 – 2014-03-08 10:19:02