2010-01-20 32 views
5

Tôi đang cố gắng kết hợp một ứng dụng Python bằng py2exe 0.6.9 và Python 2.6.4 trên Windows. Trong khi thực thi chỉ chạy tốt trên hệ thống tôi đã sử dụng để xây dựng nó, nó không thành công khi tôi cố gắng để chạy nó trên một hệ thống khác:MemoryLoadError khi cố gắng chạy ứng dụng py2exe

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 

Tôi có một linh cảm mạnh mẽ rằng tôi là thiếu thư viện, nhưng tôi m không chắc chắn rằng — đặc biệt là vì trình kiểm tra phụ thuộc không gắn cờ bất kỳ thứ gì bị thiếu trên hệ thống đích. Tôi nên tiến hành như thế nào?

Trả lời

1

Bạn có thể thực hiện kiểm tra dll và phụ thuộc theo cách thủ công. Khi bạn tạo ra exe tôi chắc chắn bạn đã nhận thấy rằng nó in ra của dll được yêu cầu/sử dụng. Kiểm tra trên hệ thống, nơi exe không hoạt động, nếu dll tồn tại và nếu chúng là cùng một phiên bản.

Một điều khác. Bạn đang sao chép toàn bộ thư mục dist vào hệ thống hay chỉ là exe, bởi vì bạn cần toàn bộ thư mục dist và không chỉ là exe.

+0

Tôi * đang * kiểm tra các tệp DLL và chúng * có * ở đó - ít nhất là trong tên.Bộ kiểm tra phụ thuộc đang xác nhận điều đó. Tôi đang sao chép toàn bộ thư mục dist, không chỉ exe. –

+0

Và phiên bản của những dll đó? bạn đã kiểm tra chúng chưa. – Paul

1

Bạn có đang thực hiện chuyển đổi py2exe trên 64bit/vista không?

Tôi đã viết mã của mình trên vista64bit và các tệp .exe tôi tạo thường không hoạt động trên 32 bit XP (đó là hai máy tôi có trong tay).

.exe trợ giúp ném ra một tệp văn bản với traceback, và có vẻ như các cửa sổ 64 bit sử dụng win32api.dll. Tôi giả sử đây là một dll được sử dụng bởi các cửa sổ 64bit để nhân rộng hành vi hệ điều hành 32bit, vì vậy tôi chỉ cần lấy cùng một tập lệnh và thực hiện chuyển đổi trên XP 32 bit. Hy vọng rằng sẽ giúp.

0

Chỉ dành cho bất kỳ ai sẽ đến đây trong tương lai. Nếu bạn đang sử dụng bất kỳ loại thư viện win32 và u mắc kẹt với loại hình này lỗi bạn có thể làm theo các bước sau:

  • Vấn đề vấn đề là có sự mâu thuẫn giữa các chức năng win32 file dll và py2exe file tự động dll . Vì vậy, để giải quyết mâu thuẫn này, bạn phải biết các chức năng của mình cần file dll, sau đó loại trừ những tập tin này từ các tùy chọn thiết lập

Ví dụ:

Theo đoạn mã sau:

import win32crypt 
win32crypt.CryptUnprotectData(...) 

tôi đã sử dụng các CryptUnprotectData chức năng vì vậy tôi tìm kiếm các CryptUnprotectData yêu cầu dll và tôi tìm thấy các thông tin sau đây enter link description here, Như bạn có thể thấy,
"Crypt32.dll" là bắt buộc.

vì vậy tôi sửa setup.py của tôi là trông như thế

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


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

và nó làm việc một cách hoàn hảo.

Các vấn đề liên quan