2010-07-01 95 views
14

Gần đây tôi đã bắt đầu học Python, và tôi hơi bối rối về cách các gói được phân phối và cài đặt.Cài đặt gói Python trong Windows

Tôi hiểu rằng cách chính thức của cài đặt gói là distutils: bạn tải về tarball nguồn, giải nén nó và chạy: python setup.py install, sau đó các module Automagically sẽ cài đặt chính nó

Tôi cũng biết về setuptools đi kèm với tập lệnh trợ giúp easy_install. Nó sử dụng trứng để phân phối, và từ những gì tôi hiểu, được xây dựng trên đầu trang của distutils và làm điều tương tự như trên, cộng với nó sẽ chăm sóc của bất kỳ phụ thuộc yêu cầu, tất cả lấy từ PyPi

Sau đó, cũng là pip, mà tôi vẫn không chắc nó khác với những người khác như thế nào.

Cuối cùng, khi tôi đang trên một máy cửa sổ, rất nhiều gói cũng cung cấp nhị phân builds qua một cửa sổ cài đặt, đặc biệt là những người mà đòi hỏi biên dịch C/code Fortran, mà nếu không sẽ là một cơn ác mộng để tự biên dịch trên cửa sổ (giả sử bạn có môi trường MSVC hoặc MinGW/Cygwin dev với tất cả các thư viện cần thiết thiết lập. Tuy nhiên, hãy cố gắng xây dựng bản thân hoặc tự lừa đảo và bạn sẽ hiểu!)

Vì vậy, ai đó có thể giúp tôi hiểu được tất cả điều này và giải thích sự khác biệt, ưu/nhược điểm của từng phương pháp. Tôi muốn biết làm thế nào mỗi theo dõi các gói (Windows Registry, tập tin cấu hình, ..). Cụ thể, cách bạn quản lý tất cả thư viện của bên thứ ba (có thể liệt kê các gói đã cài đặt, tắt/gỡ cài đặt, v.v.)

+0

Liên quan: [Liệt kê các gói site python được cài đặt?] (Http://stackoverflow.com/questions/2300794/), [Tôi có thể cài đặt các gói windows Python vào virtualenv không?] (Http://stackoverflow.com/questions/3271590 /). Cái sau đề cập đến * virtualenv * nhưng nó cũng hợp lệ bên ngoài * virtualenv *. –

+0

Điều này nên được quan tâm đối với bất kỳ ai truy cập trang này: http://stackoverflow.com/a/14753678/97160 – Amro

Trả lời

11

Tôi sử dụng pip chứ không phải trên Windows, vì vậy tôi không thể so sánh tùy chọn Windows-installer, chỉ một số thông tin về pip:

  • Pip được xây dựng trên các bộ cài đặt và yêu cầu cài đặt.
  • Pip là sự thay thế (cải tiến) đối với easy_install của setuptools. Nó làm mọi thứ easy_install, cộng thêm nhiều thứ khác (chắc chắn rằng tất cả các bản phân phối mong muốn có thể được tải xuống trước khi cài đặt bất kỳ bản phân phối nào để tránh bị hỏng cài đặt, liệt kê các bản phân phối đã cài đặt và phiên bản, gỡ cài đặt, tìm kiếm PyPI, cài đặt từ một tệp yêu cầu liệt kê nhiều bản phân phối và phiên bản ...).
  • Pip hiện không hỗ trợ cài đặt bất kỳ hình thức phân phối sẵn hoặc nhị phân nào, vì vậy mọi bản phân phối có phần mở rộng yêu cầu biên dịch chỉ có thể được cài đặt nếu bạn có trình biên dịch thích hợp. Hỗ trợ cài đặt từ trình cài đặt nhị phân của Windows là trên lộ trình, nhưng không rõ khi nào nó sẽ xảy ra.
  • Cho đến gần đây, hỗ trợ Windows của pip đã bị bong tróc và chưa được kiểm tra. Nhờ có rất nhiều công việc từ Dave Abrahams, pip trunk bây giờ vượt qua tất cả các thử nghiệm của nó trên Windows (và có một máy chủ tích hợp liên tục giúp chúng tôi đảm bảo nó vẫn như vậy), nhưng một bản phát hành chưa được thực hiện bao gồm cả công việc đó. Vì vậy, sự hỗ trợ Windows đáng tin cậy hơn sẽ đến với bản phát hành tiếp theo.
  • Tất cả các cơ chế cài đặt gói Python chuẩn lưu trữ tất cả siêu dữ liệu về các bản phân phối đã cài đặt trong tệp hoặc tệp bên cạnh (các) gói đã cài đặt thực tế. Các Distutils sử dụng tệp distribution_name-X.X-pyX.X.egg-info, pip sử dụng một thư mục có tên tương tự với nhiều tệp siêu dữ liệu trong đó. Easy_install đặt tất cả mã Python đã cài đặt cho một bản phân phối bên trong thư mục zipfile hoặc thư mục riêng của nó, và đặt một thư mục EGG-INFO bên trong thư mục đó với siêu dữ liệu trong đó. Nếu bạn nhập một gói Python từ dấu nhắc tương tác, hãy kiểm tra giá trị của gói.__tập tin__; bạn nên tìm siêu dữ liệu cho phân phối của gói đó gần đó.
  • Thông tin về bản phân phối đã cài đặt chỉ được lưu trữ trong bất kỳ loại đăng ký toàn cầu nào bằng các công cụ đóng gói dành riêng cho hệ điều hành như trình cài đặt Windows, Apt hoặc RPM. Các công cụ đóng gói chuẩn của Python không sửa đổi hoặc chú ý đến các danh sách này.
  • Pip (hoặc, theo ý kiến ​​của tôi, bất kỳ công cụ đóng gói Python) nào được sử dụng tốt nhất với virtualenv, cho phép bạn tạo các môi trường nhỏ Python riêng lẻ cho từng dự án mà bạn có thể cài đặt gói mà không ảnh hưởng đến toàn bộ hệ thống của bạn. Mỗi virtualenv mới sẽ tự động đi kèm với pip được cài đặt trong nó.

Một vài dự án khác mà bạn có thể muốn được nhận thức cũng như (vâng, có nhiều hơn nữa!):

  • distribute là một ngã ba của setuptools trong đó có một số sửa lỗi bổ sung và các tính năng.
  • distutils2 được dự định là "thế hệ tiếp theo" của bao bì Python. Đó là (hy vọng) áp dụng các tính năng tốt nhất của distutils/setuptools/distribution/pip. Nó đang được phát triển độc lập và chưa sẵn sàng để sử dụng, nhưng cuối cùng sẽ thay thế các distutils trong thư viện chuẩn Python và trở thành giải pháp đóng gói Python thực tế.

Hy vọng tất cả những điều đó đã giúp làm rõ điều gì đó! Chúc may mắn.

+0

cảm ơn bạn đã xem tổng quan, điều đó hữu ích. Một nhận xét, nhìn vào thư mục 'site-packages', ngoài dự kiến, cũng có một vài tệp' .pth' mà tôi giả sử là siêu dữ liệu easy_install? – Amro

+1

@Amro: vâng, bởi vì easy_install đặt mã Python của mỗi phân phối vào một thư mục hoặc thư mục riêng biệt, nó phải thực hiện một số sys.path hackery để làm cho chúng có thể nhập được. setuptools.pth và easy-install.pth thực hiện điều đó. –

+0

Tôi thấy, tôi đoán điều này là cần thiết của chúng tôi là có nhiều phiên bản của cùng một mô-đun mà không có xung đột .. Cảm ơn một lần nữa – Amro

0

Tôi sử dụng cửa sổ và python. Nó hơi bực bội, vì pip không phải lúc nào cũng làm việc để cài đặt mọi thứ. Python đang chuyển sang pip, vì vậy tôi vẫn sử dụng nó. Pip là tốt đẹp, bởi vì bạn có thể gỡ bỏ cài đặt các mặt hàng và sử dụng

pip freeze > requirements.txt 
pip install -r requirements.txt 

Lý do khác tôi thích pip là cho môi trường ảo như venv với python 3.4. Tôi đã tìm thấy venv dễ dàng hơn nhiều để sử dụng trên các cửa sổ hơn virtualenv.

Nếu bạn không thể cài đặt gói, bạn phải tìm nhị phân cho gói đó. http://www.lfd.uci.edu/~gohlke/pythonlibs/

Tôi đã tìm thấy các tệp nhị phân này rất hữu ích.

Pip đang cố gắng tạo ra thứ gọi là bánh xe để cài đặt nhị phân.

pip install wheel 
wheel convert path\to\binary.exe 
pip install converted_wheel.whl 

Bạn cũng sẽ phải thực hiện việc này cho bất kỳ thư viện bắt buộc nào không cài đặt và được yêu cầu cho gói đó.

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