pip hoặc pip3 để cài đặt các gói cho Python 3?


119

Tôi có một chiếc Macbook với OS X El Captain. Tôi nghĩ rằng điều đó Python 2.7được cài đặt sẵn trên đó. Tuy nhiên, tôi cũng đã cài đặt Python 3.5. Khi tôi bắt đầu sử dụng Python 3, tôi đọc rằng nếu tôi muốn cài đặt một gói, tôi nên nhập:

pip3 install some_package

Dù sao, bây giờ khi tôi sử dụng

pip install some_package

Tôi được some_packagecài đặt cho Python 3. Ý tôi là tôi có thể nhập nó và sử dụng nó mà không gặp vấn đề gì. Hơn nữa, khi tôi vừa pip3nhập Terminal, tôi nhận được thông báo này về cách sử dụng:

Usage:   
  pip <command> [options]

đó cũng là thông báo tôi nhận được khi chỉ nhập pip.

Nó có nghĩa là trong các phiên bản previos, mọi thứ đã khác, và bây giờ pippip3có thể được sử dụng thay thế cho nhau? Nếu vậy, và để tranh luận, tôi có thể cài đặt các gói Python 2thay vì như Python 3thế nào?

Câu trả lời:


73

Của bạn piplà một liên kết mềm đến cùng một đường dẫn tệp thực thi với pip3. bạn có thể sử dụng các lệnh bên dưới để kiểm tra vị trí của đường dẫn thực pippip3đường dẫn của bạn:

$ ls -l `which pip`
$ ls -l `which pip3`

Bạn cũng có thể sử dụng các lệnh bên dưới để biết thêm chi tiết:

$ pip show pip
$ pip3 show pip

Khi chúng tôi cài đặt các phiên bản python khác nhau, chúng tôi có thể tạo các liên kết mềm như vậy để

  • đặt pip mặc định thành một số phiên bản.
  • tạo các liên kết khác nhau cho các phiên bản khác nhau.

Đó là tình cảnh tương tự với python, python2,python3

Thông tin thêm bên dưới nếu bạn quan tâm đến cách nó xảy ra trong các trường hợp khác nhau:


1
Tôi nghĩ rằng điều này là sai. Pip3 của tôi cũng tự gọi nó chỉ là pip trong đầu ra trợ giúp của nó, tuy nhiên, pip đơn giản cài đặt các gói Python 2 trên hệ thống của tôi. Tôi nghĩ rằng stackoverflow.com/a/40832677/188108 là đúng, ít nhất nó cũng đồng ý với quan sát của tôi.
Torsten Bronger

nó thay đổi trên môi trường nào và cách bạn cài đặt python, câu trả lời này là để cung cấp manh mối làm thế nào để biết pip hoạt động và để trả lời tình huống của người hỏi. nếu nó không giống nhau trên hệ thống của bạn, bạn vẫn có thể sử dụng cách tương tự để tìm hiểu lý do. không có nghĩa là nó là câu trả lời sai.
CSJ

1
Tôi nghi ngờ điều đó. Tôi không có máy Mac nhưng trên các phiên bản Ubuntu mà tôi đã thử nghiệm, các biến thể pip không phải là liên kết tượng trưng. Thay vào đó, chúng là các tập lệnh Python nhỏ chỉ khác nhau ở dòng shebang.
Torsten Bronger

vâng, ý tôi là nó thay đổi theo môi trường và cách bạn cài đặt python (brew, apt, pyenv, biên dịch thủ công, v.v.) và đối với tình huống của người hỏi, đó là vì chúng là các liên kết mềm và chúng tôi sử dụng ls -lpip showđể xác minh lý do. và tất nhiên, câu trả lời này là để trả lời câu hỏi của anh ta.
CSJ

Tôi không nghĩ rằng có các liên kết tượng trưng trên máy tính của người hỏi. Tôi không tìm thấy bất kỳ tài liệu tham khảo nào cho thấy pip từng hoạt động / hoạt động theo cách này.
Torsten Bronger

26

Nếu bạn có python 2.x và sau đó cài đặt python3, pip của bạn sẽ trỏ đến pip3. bạn có thể xác minh điều đó bằng cách nhập pip --versiongiống như pip3 --version.

Trên hệ thống của bạn hiện có pip, pip2 và pip3 .

Nếu bạn muốn, bạn có thể thay đổi pip để trỏ đến pip2 thay vì pip3.


1
làm thế nào để bạn thay đổi điều đó
ahnbizcad

3
@ahnbizcad Cách đơn giản nhất là xác định một bí danh như thế này: alias pip = "PIP3"
Apadana

2
Tôi đã làm điều này, nhưng PIP3 tôi là v9 khi pip là v10, vì vậy tôi đã gõ pip3 install --upgrade pipvà nó làm cho cả hai phiên bản 10
Kevin Danikowski

2
Câu trả lời này là sai. pip sẽ không trỏ đến pip3. pip sẽ cài đặt các gói Python 2 và pip3 sẽ cài đặt các gói Python 3. Đã thử nghiệm trên Lubuntu 18.10.
Torsten Bronger

@TorstenBronger thứ tự cài đặt python trong môi trường của bạn là gì?
apadana

14

Khi bạn cài đặt python3, pip3sẽ được cài đặt. Và nếu bạn không có cài đặt python khác (như python2.7) thì một liên kết được tạo trỏ pipđến pip3.

Vì vậy, piplà một liên kết tớipip3 nếu không có phiên bản python nào khác được cài đặt (ngoài python3). pipthường chỉ đến cài đặt đầu tiên.


7

Đây là một chủ đề khó. Cuối cùng, nếu bạn gọi pipnó sẽ gọi một trong hai pip2hoặc pip3, tùy thuộc vào cách bạn thiết lập hệ thống của mình.


6

Bằng hình minh họa:

pip --version
  pip 19.0.3 from /usr/lib/python3.7/site-packages/pip (python 3.7)

pip3 --version
  pip 19.0.3 from /usr/lib/python3.7/site-packages/pip (python 3.7)

python --version
  Python 3.7.3

which python
  /usr/bin/python

ls -l '/usr/bin/python'
  lrwxrwxrwx 1 root root 7 Mar 26 14:43 /usr/bin/python -> python3

which python3
  /usr/bin/python3

ls -l /usr/bin/python3
  lrwxrwxrwx 1 root root 9 Mar 26 14:43 /usr/bin/python3 -> python3.7

ls -l /usr/bin/python3.7
  -rwxr-xr-x 2 root root 14120 Mar 26 14:43 /usr/bin/python3.7

Do đó, trong Python hệ thống mặc định của tôi (Python 3.7.3), pip pip3 .


5

Tôi nghĩ pip, pip2pip3không phải là các liên kết mềm đến cùng một đường dẫn tệp thực thi. Lưu ý các lệnh này và kết quả trong thiết bị đầu cuối linux của tôi:

mrz@mrz-pc ~ $ ls -l `which pip`
-rwxr-xr-x 1 root root 292 Nov 10  2016 /usr/bin/pip
mrz@mrz-pc ~ $ ls -l `which pip2`
-rwxr-xr-x 1 root root 283 Nov 10  2016 /usr/bin/pip2
mrz@mrz-pc ~ $ ls -l `which pip3`
-rwxr-xr-x 1 root root 293 Nov 10  2016 /usr/bin/pip3
mrz@mrz-pc ~ $ pip -V
pip 9.0.1 from /home/mrz/.local/lib/python2.7/site-packages (python 2.7)
mrz@mrz-pc ~ $ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
mrz@mrz-pc ~ $ pip3 -V
pip 9.0.1 from /home/mrz/.local/lib/python3.5/site-packages (python 3.5)

Như bạn thấy chúng tồn tại trong các con đường khác nhau.

pip3 luôn chỉ hoạt động trên môi trường Python3, như pip2 làm với Python2. pip hoạt động trên bất kỳ môi trường nào phù hợp với ngữ cảnh. Ví dụ: nếu bạn đang sử dụng một venv Python3, pip sẽ hoạt động trên môi trường Python3.


Tôi sẽ nói rằng hơi sai lầm khi nói rằng pip được liên kết với bất kỳ môi trường nào phù hợp với ngữ cảnh. Trong trường hợp của venv, tệp thực thi của pip dành riêng cho venv chứ không phải hệ thống. Trừ khi bạn đã cài đặt nhiều phiên bản python trong cùng một địa điểm, tôi không thể thấy sự cố này phát sinh ở đó. Khi không sử dụng venv, phiên bản pip được sử dụng đôi khi không trực quan và phụ thuộc vào cấu hình hệ thống của bạn (thường nó được xác định bởi phiên bản python được cài đặt đầu tiên, như những người khác đã nói). Nhưng Pip không có bất kỳ thông tin tình báo nó sử dụng để chọn một phiên bản động
Luke Baumann

3

Nếu bạn đã cài đặt Python 2.7, tôi nghĩ bạn có thể sử dụng pip2pip2.7cài đặt các gói dành riêng cho Python 2, như

pip2 install some_pacakge

hoặc là

pip2.7 install some_package

Và bạn có thể sử dụng pip3hoặc pip3.5cài đặt pacakges dành riêng cho Python 3.


1

Trên phiên bản Windows của tôi - và tôi không hoàn toàn hiểu môi trường của mình - việc sử dụng pip3 để cài đặt gói kaggle-cli đã hoạt động - trong khi pip thì không. Tôi đã làm việc trong một môi trường chung cư và các môi trường dường như khác nhau.

(fastai) C: \ Users \ redact \ Downloads \ fast.ai \ deeplearning1 \ nbs> pip --version

pip 9.0.1 từ C: \ ProgramData \ Anaconda3 \ envs \ fastai \ lib \ site-pack (python 3.6)

(fastai) C: \ Users \ redact \ Downloads \ fast.ai \ deeplearning1 \ nbs> pip3 --version

pip 9.0.1 từ c: \ users \ redact \ appdata \ local \ Programs \ python \ python36 \ lib \ site-pack (python 3.6)


0

Với một virtualenv Python 3.6 đã được kích hoạt trong somepath / venv , các bí danh sau đã giải quyết các vấn đề khác nhau trên macOS Sierra trong đó pip nhấn mạnh vào việc trỏ đến Python 2.7 của Apple.

alias pip='python somepath/venv/lib/python3.6/site-packages/pip/__main__.py'

Điều này không hoạt động tốt khi tôi phải làm sudo pipvì người dùng root không biết gì về bí danh của tôi hoặc virtualenv, vì vậy tôi cũng phải thêm một bí danh bổ sung để xử lý điều này. Đó là một cuộc tấn công, nhưng nó hoạt động và tôi biết nó làm gì:

alias sudopip='sudo somepath/venv/bin/python somepath/venv/lib/python3.6/site-packages/pip/__main__.py'

lý lịch:

pip3 không tồn tại để bắt đầu ( không tìm thấy lệnh ) với và which pipsẽ trả về /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pip , Apple Python.

Python 3.6 đã được cài đặt thông qua macports.

Sau khi kích hoạt 3.6 virtualenv mà tôi muốn làm việc, which pythonsẽ trả về somepath / venv / bin / python

Bằng cách nào đó pip installsẽ làm đúng và tấn công virtualenv của tôi, nhưng pip listsẽ làm xáo trộn các gói Python 2.7.

Đối với Python, đây là một cách vượt trội so với mong đợi của tôi về mức độ thân thiện với người mới bắt đầu.

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.