cài đặt apt-get vs cài đặt pip


103

Tôi hơi bối rối về các trường hợp phải sử dụng các lệnh trên khi tải xuống các gói python. Tôi đã cố tải xuống một gói có tên pyudev theo câu trả lời với câu hỏi này . Tôi đã thực hiện lệnh này:

sudo pip install python-pyudev

nhưng nhận được thông báo sau:

Downloading/unpacking python-pyudev

  Could not find any downloads that satisfy the requirement python-pyudev
Cleaning up...
No distributions at all found for python-pyudev
Storing complete log in /home/vineet/.pip/pip.log

Tuy nhiên, sau đây hoạt động tốt:

sudo apt-get install python-pyudev

Khi nào được apt-getcho là được sử dụng để cài đặt các gói và khi nào được python-pipsử dụng?


2
pipchỉ được sử dụng để cài đặt các gói python, nhưng apt-getđược sử dụng để cài đặt tất cả các gói.
Avinash Raj

3
ok..vậy tại sao pip không thể cài đặt python-pyudev?
Vine Kaushik

Câu trả lời:


100

PyPI là chỉ mục Gói Python - kho lưu trữ các mô-đun python.

pipđược sử dụng để tải xuống và cài đặt các gói trực tiếp từ PyPI. PyPI được lưu trữ bởi Python Software Foundation . Nó là một trình quản lý gói chuyên biệt chỉ giao dịch với các gói python.

apt-get được sử dụng để tải xuống và cài đặt các gói từ kho Ubuntu được Canonical lưu trữ.

Một số khác biệt giữa cài đặt gói python từ apt-getpipnhư sau:

  • Canonical chỉ cung cấp các gói cho các mô-đun python được chọn. Trong khi đó, PyPI lưu trữ một loạt các mô-đun python rộng hơn nhiều. Vì vậy, có rất nhiều mô-đun python mà bạn sẽ không thể cài đặt bằng cách sử dụng apt-get.

  • Canonical chỉ lưu trữ một phiên bản duy nhất của bất kỳ gói nào (thường là phiên bản mới nhất hoặc phiên bản mới nhất được phát hành gần đây). Vì vậy, với apt-getchúng tôi không thể quyết định phiên bản gói python mà chúng tôi muốn. pipgiúp chúng tôi trong tình huống này. Chúng tôi có thể cài đặt bất kỳ phiên bản nào của gói đã được tải lên trước đó trên PyPI. Điều này là vô cùng hữu ích trong trường hợp xung đột trong phụ thuộc.

  • apt-getcài đặt các mô-đun python ở vị trí toàn hệ thống. Chúng tôi không thể chỉ cài đặt các mô-đun trong virtualenv dự án của chúng tôi . pipgiải quyết vấn đề này cho chúng tôi. Nếu chúng ta đang sử dụng pipsau khi kích hoạt virtualenv, nó đủ thông minh để chỉ cài đặt các mô-đun trong virtualenv dự án của chúng ta. Như đã đề cập ở điểm trước, nếu có một phiên bản của gói python cụ thể đã được cài đặt ở vị trí toàn hệ thống và một trong các dự án của chúng tôi yêu cầu phiên bản cũ hơn của cùng gói python, trong các tình huống như vậy, chúng tôi có thể sử dụng virtualenv và pip để cài đặt phiên bản cũ hơn của gói python mà không có bất kỳ xung đột nào.

  • Như @Radu Rădeanu đã chỉ ra trong câu trả lời này , nhìn chung sẽ có sự khác biệt về tên của các gói. Canonical thường đặt tên các gói Python 2 là python-<package_name>và các gói Python 3 là python3-<package_name>. Trong khi đó, pipchúng ta thường chỉ cần sử dụng <package_name>cho cả gói Python 2 cũng như các gói Python3.

Bạn nên sử dụng cái nào:

Cả hai apt-getpiplà trình quản lý gói trưởng thành tự động cài đặt bất kỳ phụ thuộc gói nào khác trong khi cài đặt. Bạn có thể sử dụng bất cứ ai như bạn muốn. Tuy nhiên, nếu bạn cần cài đặt một phiên bản cụ thể của gói python hoặc cài đặt gói trong virtualenv hoặc cài đặt gói chỉ được lưu trữ trên PyPI; chỉ pipgiúp bạn giải quyết vấn đề đó Mặt khác, nếu bạn không nhớ cài đặt các gói ở vị trí toàn hệ thống thì việc bạn sử dụng apt-gethay không thực sự quan trọng pip.


5
Ngoài ra, bạn nên cố gắng sử dụng cái này hay cái kia , không phải cả hai pipvà đồng apt-getthời.
earthmeLon

3
Sớm hay muộn, người ta có thể cần một gói hoặc một phiên bản không được cung cấp bởi apt-get. Vì sử dụng cả hai apt-getpipcó thể gây ra xung đột, nên lời khuyên là luôn luôn sử dụng pipcho các gói được hỗ trợ bởi pip?
Abhishek Anand

2
@Abhishek, phương pháp ưa thích của tôi là luôn sử dụng Python thông qua virtualenv .. Vì vậy, vâng, tôi thích sử dụng pip hơn apt ..
Aditya

Điều đó mở ra những con giun của riêng nó trong những tình huống nhất định. Giả sử bạn đã cài đặt hầu hết các gói sudo pipmà không cần virtualenvvì hầu hết các dự án của bạn đều cần cùng một môi trường (nhưng rộng hơn so với những gì được cung cấp với cài đặt Ubuntu sạch). Sau đó, khi bạn làm một nâng cấp hệ thống và Ubuntu quyết định nâng cấp Python lên phiên bản mới (giống như với zestytới artful- Python 3,5-3,6), tất cả các gói pip cài đặt của bạn trong /usrđược bỏ lại phía sau và pip.get_installed_distributions()tạo ra một danh sách trống.
z33k

Sử dụng pip trong bối cảnh toàn cầu là hoàn toàn sai và không được sử dụng, vì nó sẽ gây rối cài đặt hệ thống python. Pip và apt-get một thứ hoàn toàn khác nhau, và thật sai lầm khi so sánh chúng. Hãy thử cài đặt một mô-đun python phụ thuộc vào các thư viện không phải python khác và bạn sẽ nhanh chóng nhận ra lý do tại sao bạn có thể cần apt-get.
mestia

21

Như @AvinashRaj đã nói trong bình luận của mình , chỉ pipđược sử dụng để cài đặt các gói python, nhưng apt-getđược sử dụng để cài đặt các gói được tạo bằng bất kỳ ngôn ngữ lập trình nào.

Vấn đề chính của bạn là tìm đúng tên gói trong cả hai trường hợp:

pip search pyudev

sẽ cung cấp cho bạn đúng tên cho các gói bạn muốn cài đặt sử dụng pip install, như

apt-cache search pyudev

sẽ cung cấp cho bạn tên đúng cho gói bạn muốn cài đặt bằng cách sử dụng apt-get install:

radu@Radu: ~ $ pip search pyudev
pyudev                    - A libudev binding
radu@Radu: ~ $ apt-cache search pyudev
python-pyudev - Python bindings for libudev
python3-pyudev - Python3 bindings for libudev

Vì vậy, trong conlusion, các phóng viên của sudo apt-get install python-pyudevsudo pip install pyudev, không phải sudo pip install python-pyudev.

Bây giờ phụ thuộc vào bạn những gì bạn muốn chọn khi bạn muốn cài đặt một gói python: piphoặc apt-get. Xem ví dụ Q & A này về sự khác biệt trong việc cài đặt gói bằng pipapt-get.


2

Cách ưa thích của tôi là luôn luôn sử dụng aptvà chỉ trong trường hợp mô-đun chưa có sẵn trong kho Debian / Ubuntu để sử dụng pip, mà chỉ trong bối cảnh người dùng - --usercờ. Bằng cách sử dụng pipmột cách nào đó phải có được tất cả các phụ thuộc xây dựng được cài đặt từ kho lưu trữ của Ubuntu hoặc tự cung cấp chúng có thể là một nhiệm vụ tẻ nhạt. apt-getcài đặt các gói nhị phân trong khi pipxây dựng chúng sau khi tải xuống. Không nên sử dụng pip để cài đặt các mô-đun vào các vị trí hệ thống. Điều này hoàn toàn sai. Luôn luôn sử dụng --usercờ để cài đặt một mô-đun đến vị trí nhà. PYTHONPATH được cấu hình đúng cho phép python chọn các mô-đun từ HOME trước và sau đó các mô-đun hệ thống được cài đặt apt-get.

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.