2009-07-17 28 views
6

Tôi sẽ thú nhận tôi rất mới với Python và tôi thực sự không biết mình đang làm gì. Gần đây tôi đã tạo một ứng dụng Windows rất nhỏ bằng cách sử dụng Python 2.6.2 và wxPython 2.8. Và nó hoạt động rất tốt; Tôi khá hài lòng với nó hoạt động bình thường như thế nào. Thông thường, ý tôi là khi tôi gọi trực tiếp thông qua trình thông dịch Python, như sau:py2exe: Ứng dụng Windows Windows Biên dịch sẽ không chạy vì DLL

> python myapp.py 

Tuy nhiên, tôi muốn tiến thêm một bước và thực sự biên dịch nó thành một tệp thực thi độc lập. Vì vậy, tôi đã theo dõi these instructions từ wiki wxPython sử dụng py2exe. Lúc đầu, nó đã cho tôi lỗi trong dòng lệnh, nói rằng MSVCR90.dll là mất tích. Sau đó, tôi sao chép MSVCR90.dll vào thư mục Python \ DLLs của tôi. Điều đó nhìn đầu tiên giống như nó đã sửa nó, vì nó đã làm thành công những gì cần thiết. Nó đã kết thúc với một cảnh báo nhanh rằng có một số tập tin DLL chương trình phụ thuộc vào và tôi có thể hoặc có thể không cần phải phân phối chúng.

Vì vậy, tôi đã điều hướng đến thư mục dist mà py2exe đã tạo và thử chạy tệp thực thi của tôi. Nhưng cố gắng để mở nó chỉ hiện lên một hộp thoại báo lỗi mà nói:

This application failed to start because MSVCR90.dll was not found. 
Re-installing the application may fix this problem. 

Vì vậy, tôi đã đi trước và sao chép MSVCR90.DLL lại vào thư mục quận này. Nhưng điều đó không làm được điều đó. Sau đó, tôi đã sao chép nó vào thư mục WINDOWS \ system32. Điều đó cũng không làm được. Tôi cần làm gì để làm việc này?

+1

Đây là bản sao của một câu hỏi khác với một cuộc thảo luận đầy đủ hơn:
Một ngày StackOverflow có thể tin tưởng tôi đủ để đánh dấu điều này là trùng lặp. – resplin

Trả lời

8

Bạn không thể chỉ sao chép msvcr * .dll - chúng cần phải được thiết lập bằng cách sử dụng quy tắc cho các hội đồng cạnh nhau. Bạn có thể làm điều này bằng cách cài đặt gói redistributable như Sam chỉ ra, hoặc bạn có thể đặt chúng cùng với thực thi của bạn miễn là bạn tuân thủ các quy tắc.

Xem phần "Triển khai Visual C++ DLL thư viện như private assemblies" ở đây: How to Deploy using XCopy để biết chi tiết, nhưng về cơ bản ứng dụng của bạn trông như thế này:

c:\My App\MyApp.exe 
c:\My App\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest 
c:\My App\Microsoft.VC90.CRT\msvcr90.dll 

Một lợi ích của việc này là người dùng không phải quản trị có thể sử dụng ứng dụng của bạn (Tôi tin rằng bạn cần phải là quản trị viên để cài đặt thời gian chạy thông qua trình cài đặt redistributable). Và không cần thiết cho bất kỳ trình cài đặt nào - bạn chỉ có thể sao chép các tệp vào PC và tất cả đều hoạt động.

+0

Đó có phải là một tính năng của Vista không? Tôi gặp phải một vấn đề tương tự (MSVCP71.DLL báo cáo mất tích khi tung ra một ứng dụng py2exe) và chỉ cần đặt nó trong cùng một thư mục như .exe cố định nó (ít nhất là trên XP) –

+1

@Luper: Tôi tin rằng các quy tắc mới đến với msvcr80 . – RichieHindle

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