Sự khác biệt giữa 'python setup.py install' và 'pip install'


105

Tôi có một gói bên ngoài mà tôi muốn cài đặt vào python virtualenv của mình từ một tệp tar. Cách tốt nhất để cài đặt gói là gì?

Tôi đã khám phá ra 2 cách có thể làm điều đó:

  1. Giải nén tệp tar, sau đó chạy python setup.py installbên trong thư mục được giải nén .
  2. pip install packagename.tar.gztừ ví dụ # 7 trong https://pip.pypa.io/en/stable/reference/pip_install/#examples

Nếu có bất kỳ sự khác biệt nào khi thực hiện chúng theo 2 cách này.


5
Sử dụng pip. Bạn có thể gỡ cài đặt các gói với nó.
Máy xay sinh tố vào

"Từ nguồn" như trong "kiểm tra VCS", hay như trong sdist?

Điều gì là "tốt nhất" phụ thuộc vào yêu cầu của bạn! Bạn đã thử một trong hai giải pháp này và thất bại theo một cách nào đó? Hoặc là bạn hỏi về sự khác biệt giữa các phương pháp tiếp cận?
Martin Atkins,

Ví dụ, trên fedora, sử dụng yum.
perreal,

Câu trả lời:


109

Nhìn bề ngoài, cả hai đều làm điều tương tự: thực hiện python setup.py installhoặc pip install <PACKAGE-NAME>sẽ cài đặt gói python của bạn cho bạn, với mức độ phiền phức tối thiểu.

Tuy nhiên, việc sử dụng pip mang lại một số lợi thế bổ sung khiến nó dễ sử dụng hơn nhiều.

  • pip sẽ tự động tải xuống tất cả các phần phụ thuộc của một gói cho bạn. Ngược lại, nếu sử dụng setup.py, bạn thường phải tìm kiếm và tải xuống các phần phụ thuộc theo cách thủ công, điều này rất tẻ nhạt và có thể trở nên bực bội.
  • pip theo dõi các siêu dữ liệu khác nhau cho phép bạn dễ dàng gỡ cài đặt và cập nhật các gói chỉ với một lệnh duy nhất: pip uninstall <PACKAGE-NAME>pip install --upgrade <PACKAGE-NAME>. Ngược lại, nếu bạn cài đặt một gói bằng cách sử dụng setup.py, bạn phải xóa và duy trì một gói theo cách thủ công nếu bạn muốn loại bỏ nó, điều này có thể dễ xảy ra lỗi.
  • Bạn không còn phải tải xuống các tệp của mình theo cách thủ công. Nếu sử dụng setup.py, bạn phải truy cập trang web của thư viện, tìm nơi tải nó, giải nén tệp, chạy setup.py... Ngược lại, pip sẽ tự động tìm kiếm Chỉ mục gói Python (PyPi) để xem gói có tồn tại ở đó không, và sẽ tự động tải xuống, giải nén và cài đặt gói cho bạn. Với một vài ngoại lệ, hầu hết mọi thư viện Python thực sự hữu ích đều có thể được tìm thấy trên PyPi.
  • pip sẽ cho phép bạn dễ dàng cài đặt bánh xe, đây là tiêu chuẩn mới của phân phối Python. Thông tin thêm về bánh xe .
  • pip cung cấp các lợi ích bổ sung tích hợp tốt với việc sử dụng virtualenv, đây là chương trình cho phép bạn chạy nhiều dự án yêu cầu các thư viện và phiên bản Python xung đột trên máy tính của bạn. Thông tin thêm .
  • pip được đóng gói theo mặc định với Python kể từ Python 2.7.9 trên dòng Python 2.x và với Python 3.4.0 trên dòng Python 3.x, giúp nó thậm chí còn dễ sử dụng hơn.

Vì vậy, về cơ bản, hãy sử dụng pip. Nó chỉ cung cấp những cải tiến trong việc sử dụng python setup.py install.


Nếu bạn đang sử dụng phiên bản Python cũ hơn, không thể nâng cấp và chưa cài đặt pip, bạn có thể tìm thêm thông tin về cách cài đặt pip tại các liên kết sau:

pip, tự nó, không thực sự yêu cầu một hướng dẫn. 90% thời gian, lệnh duy nhất bạn thực sự cần là pip install <PACKAGE-NAME>. Điều đó nói rằng, nếu bạn muốn tìm hiểu thêm về chi tiết chính xác những gì bạn có thể làm với pip, hãy xem:

Bạn cũng thường được khuyến nghị sử dụng pip và virtualenv cùng nhau. Nếu bạn là người mới bắt đầu sử dụng Python, cá nhân tôi nghĩ rằng sẽ ổn nếu bắt đầu chỉ sử dụng pip và cài đặt các gói trên toàn cầu, nhưng cuối cùng tôi nghĩ bạn nên chuyển sang sử dụng virtualenv khi bạn giải quyết các dự án nghiêm túc hơn.

Nếu bạn muốn tìm hiểu thêm về cách sử dụng đồng thời pip và virtualenv, hãy xem:


1
Pip cài đặt nội bộ có gọi tệp setup.py không?
biến

@variable, pip cài đặt từ "bánh xe", gói được biên dịch trước, không, pip cài đặt từ nguồn thì không: xem giao diện hệ thống xây dựng pip cài đặt
denis

Theo kinh nghiệm của tôi python setup.py installcũng tải xuống và cài đặt các phụ thuộc. Đây có phải là sự thay đổi kể từ khi bạn viết câu trả lời này vào năm 2013 không?
Ken Williams

19

python setup.py installlà tương tự của thực hiện cài đặt: đó là một cách hạn chế để biên dịch và sao chép tệp vào thư mục đích. Điều này không có nghĩa rằng đó là cách tốt nhất để thực sự cài đặt phần mềm trên hệ thống của bạn.

piplà một trình quản lý gói, có thể cài đặt, nâng cấp, liệt kê và gỡ cài đặt các gói, giống như các trình quản lý gói quen thuộc, bao gồm: dpkg, apt, yum, urpmi, portsv.v. Dưới mui xe, nó sẽ chạy python setup.py install, nhưng với các tùy chọn cụ thể để kiểm soát cách thức và nơi mọi thứ được cài đặt.

Tóm lại: sử dụng pip.


2

Câu hỏi là về phương pháp ưa thích để cài đặt một tarball cục bộ có chứa gói python, KHÔNG phải về lợi thế của việc tải gói lên một dịch vụ lập chỉ mục như PyPi.

Vì tôi biết rằng một số nhà phân phối phần mềm không tải gói của họ lên PyPi, thay vào đó yêu cầu các nhà phát triển tải xuống gói từ trang web của họ và cài đặt.

python setup.py cài đặt

Điều này có thể hoạt động nhưng không được khuyến khích. Không cần thiết phải mở tệp tarball và vào đó để chạy tệp setup.py.

pip cài đặt ../path/to/packagename.tar.gz

Đây là cách được thiết kế và ưa thích. Cô đọng và phù hợp với các gói kiểu PyPi.

pip installthể tìm thêm thông tin về tại đây: https://pip.readthedocs.io/en/stable/reference/pip_install/


Chúng ta có thể sử dụng pip install -e không?
biến
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.