2010-01-20 52 views
5

我試圖在Windows上使用py2exe 0.6.9和Python 2.6.4捆綁Python應用程序。嘗試運行py2exe應用程序時出現MemoryLoadError

C:\Documents and Settings\Administrator\Desktop\dist>.\backend.exe install 
Traceback (most recent call last): 
    File "boot_service.py", line 6, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "win32serviceutil.pyo", line 9, in <module> 
    File "zipextimporter.pyo", line 98, in load_module 
ImportError: MemoryLoadLibrary failed loading win32api.pyd 

我有我缺少一個庫中的強烈的預感我」,而是:當可執行文件運行我用來建立在系統上就好了,就當我嘗試另一個系統上運行失敗m確定哪一個—特別是因爲依賴檢查器沒有標記目標系統上缺少的任何東西。我應該如何繼續?

回答

1

您可以手動完成的DLL和依賴檢查。當你生成exe文件時,我確信你已經注意到它會打印出需要/使用的dll文件。檢查系統,exe文件不工作,dll是否存在以及是否是相同的版本。

另一件事。你是否將整個dist文件夾複製到系統或只是exe文件,因爲你需要整個dist文件夾而不僅僅是exe文件。

+0

我* * *正在檢查這些DLL,它們*在那裏 - 至少是名稱。依賴檢查器正在確認。 我正在複製整個dist文件夾,而不僅僅是exe。 – 2010-02-26 19:06:12

+0

這些DLL的版本是?你檢查過他們嗎? – Paul 2010-02-28 18:34:51

1

你在做一個64位/ Vista中的py2exe轉換?

我一直在vista64bit上編寫我的代碼,而我創建的.exe文件通常在32位XP上無法工作(那些是我手上的兩臺機器)。

中的.exe有益拋出與追溯的文本文件,並出現了64位Windows使用win32api.dll。我認爲這是一個由64位窗口用來複制32位操作系統行爲的.dll文件,因此我只需使用相同的腳本並在32位XP上進行轉換。希望有所幫助。

0

剛的人誰都會來這裏的未來。如果您在使用任何類型的Win32庫和u堅持這種類型的錯誤,你可以做以下步驟:

  • 問題的問題是,有dll文件的py2exe Win32函數之間的衝突,並自動dll文件。因此,要解決這個矛盾,你必須知道所需的dll文件的功能,然後在設置選項

例排除這些文件:

根據下面的代碼:

import win32crypt 
win32crypt.CryptUnprotectData(...) 

我用CryptUnprotectData函數,所以我搜索了CryptUnprotectData所需的DLL,我發現以下信息enter link description here,正如你所看到的,
「Crypt32.dll」是必需的。

所以編輯我的setup.py是看起來像

includes = ["win32crypt"] 
dll_excludes=["Crypt32.dll"] 


setup(
    options = {'py2exe': {'bundle_files': 1, 'compressed': True,'dll_excludes': dll_excludes,'includes': includes}}) 

它完美地工作。

相關問題