2012-08-26 36 views
19

Tôi đang cố gắng để xây dựng một gói từ nguồn bằng cách thực hiện python setup.py py2exeLỗi: "MSVCP90.dll: Không có tập tin hoặc thư mục" mặc dù Microsoft Visual C++ 2008 Redistributable Package được cài đặt

Đây là phần mã từ setup.py, tôi cho rằng sẽ có liên quan:

if sys.platform == "win32": # For py2exe. 
    import matplotlib 
    sys.path.append("C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\redist\\x86\\Microsoft.VC90.CRT") 
    base_path = "" 
    data_files = [("Microsoft.VC90.CRT", glob.glob(r"C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*")), 

Lỗi nó cho thấy:

*** finding dlls needed *** 
error: MSVCP90.dll: No such file or directory 

Nhưng tôi đã cài đặt "Microsoft Visual C++ 2008 Redis Gói có thể chia nhỏ ". Tôi đang chạy python 32 bit trên Windows 64 bit 8. Tôi đang cố gắng tạo một tệp nhị phân 32 bit.

Cũng không có thư mục nào như sau: "C: \ Program Files \ Microsoft Visual Studio 9.0 \ VC \ redist \". Đây là những gì máy tính của tôi chứa:

enter image description here

EDIT:

On tìm kiếm msvcp90.dll trên C của tôi: \ ổ tôi thấy rằng chúng được cài đặt trong đường dẫn kỳ lạ như thế này:

enter image description here

+0

Các liên kết này có thể trợ giúp: http://stackoverflow.com/questions/1158705/msvcp90-dll-not-found https://www.microsoft.com/en-us/download/details.aspx?id=29 – squiguy

+1

Mã này có thành công không: 'nhập ctypes; lib = ctypes.WinDLL ('msvcp90.dll') ' –

+0

@DavidHeffernan: Vâng, mã này thành công trong trình bao python (IDLE). Sau khi thực hiện mã của bạn, nếu tôi chạy, ">>> lib" Nó nói claws

Trả lời

12

Tôi khuyên bạn nên bỏ qua phụ thuộc hoàn toàn. Thêm MSVCP90.dll vào danh sách dll_excludes được cung cấp làm tùy chọn cho py2exe. Người dùng sẽ phải cài đặt Microsoft Visual C++ 2008 redistributable. Một ví dụ:

setup(
    options = { 
      "py2exe":{ 
      ... 
      "dll_excludes": ["MSVCP90.dll", "HID.DLL", "w9xpopen.exe"], 
      ... 
     } 
    }, 
    console = [{'script': 'program.py'}] 
) 
+0

VS2008 redistributable? Đó là một số gói mới mà tôi cần phải cài đặt? – claws

+0

Xin lỗi, tôi có nghĩa là gói Redist Visual C++ 2008. Tôi sẽ chỉnh sửa để sửa. – nneonneo

+1

Nếu đây là địa chỉ http://www.microsoft.com/en-us/download/details.aspx?id=29. Sau đó, tôi đã cài đặt nó và sửa chữa nó một lần nữa và một lần nữa. Vẫn còn vấn đề vẫn tồn tại – claws

3

(câu trả lời mới, vì câu trả lời khác mô tả một giải pháp thay thế)

Bạn có thể lấy các tập tin từ thư mục WinSxS và sao chép chúng vào C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT thư mục (thường được tạo ra bởi Visual Studio, mà bạn không có). Sao chép chúng để có được cơ cấu như sau:

+-Microsoft.VC90.CRT 
    | | 
    | +-Microsoft.VC90.CRT.manifest 
    | +-msvcm90.dll 
    | +-msvcp90.dll 
    | +-msvcr90.dll 

Sau đó, bạn sẽ có thể chạy chương trình cài đặt (vẫn trừ msvcp90.dll, như trong câu trả lời khác), và nó thành công nên tìm các tập tin dưới Microsoft.VC90.CRT và sao chép chúng dưới dạng tệp dữ liệu cho nhóm của bạn.

Xem the py2exe tutorial để biết thêm thông tin.

0

Tôi nghĩ rằng nó có liên quan đến không gian trong thư mục. Bạn nên thử sử dụng .rstrip(). Ví dụ: đặt giá trị này:

directory='C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT' 
directory=directory.rstrip() 

Sau đó, bạn có thể sử dụng thư mục biến như bạn đã sử dụng đường dẫn thực tế.

Điều này sẽ làm cho python có thể nhận ra thư mục nơi nó không thể giải mã được trước đó.

0

Tôi từng có một số lượng lớn các sự cố với biến chứng trên Windows, như vấn đề bạn đang gặp phải cũng như cài đặt các gói như Cython với pip install cython.

Giải pháp phù hợp nhất với tôi sau hai tuần đau đớn đã tải xuống và chạy bản nhị phân MinGW GCC không chính thức cho Windows được cung cấp here. Bạn có thể muốn thử cho rằng một shot và nhìn thấy nếu nó giúp.

Nếu bạn làm điều đó, bạn có thể muốn gỡ cài đặt MinGW nếu bạn đã có. Tôi không biết điều đó có cần thiết hay không, nhưng tôi luôn làm như vậy. Tôi đã có nó được cài đặt side-by-side với Cygwin mà không có bất kỳ vấn đề.