pip หรือ pip3 เพื่อติดตั้งแพ็คเกจสำหรับ Python 3?


121

ฉันมี Macbook ที่มี OS X El Captain ฉันคิดว่าPython 2.7มันติดตั้งมาล่วงหน้าแล้ว อย่างไรก็ตามฉันติดตั้งPython 3.5ด้วย เมื่อฉันเริ่มใช้Python 3ฉันอ่านว่าถ้าฉันต้องการติดตั้งแพ็คเกจฉันควรพิมพ์:

pip3 install some_package

อย่างไรก็ตามตอนนี้เมื่อฉันใช้

pip install some_package

ฉันได้รับการsome_packageติดตั้งสำหรับPython 3. ฉันหมายความว่าฉันสามารถนำเข้าและใช้งานได้โดยไม่มีปัญหา นอกจากนี้เมื่อฉันพิมพ์เพียงpip3ในTerminalฉันได้รับข้อความนี้เกี่ยวกับการใช้งาน:

Usage:   
  pip <command> [options]

pipซึ่งเป็นข้อความเดียวกันที่ฉันได้รับเมื่อฉันพิมพ์เพียง

มันหมายความว่าในรุ่น previos สิ่งที่แตกต่างกันและตอนนี้pipและpip3สามารถใช้แทนกันได้? ถ้าเป็นเช่นนั้นและเพื่อประโยชน์ในการโต้แย้งฉันจะติดตั้งแพ็กเกจPython 2แทนได้Python 3อย่างไร

คำตอบ:


75

ของคุณpipคือซอฟต์ลิงก์ไปยังพา ธ ไฟล์ปฏิบัติการเดียวกันกับpip3. คุณสามารถใช้คำสั่งด้านล่างเพื่อตรวจสอบว่าเส้นทางของคุณpipและpip3จริงอยู่ที่ไหน:

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

คุณสามารถใช้คำสั่งด้านล่างเพื่อทราบรายละเอียดเพิ่มเติม:

$ pip show pip
$ pip3 show pip

เมื่อเราติดตั้ง python เวอร์ชันต่างๆเราอาจสร้างซอฟต์ลิงก์ดังกล่าวไปที่

  • ตั้งค่า pip เริ่มต้นเป็นบางเวอร์ชัน
  • สร้างลิงค์ที่แตกต่างกันสำหรับเวอร์ชันต่างๆ

มันเป็นสถานการณ์เดียวกันกับpython, python2,python3

ข้อมูลเพิ่มเติมด้านล่างหากคุณสนใจว่ามันเกิดขึ้นได้อย่างไรในกรณีต่างๆ:


1
ฉันคิดว่านี่เป็นสิ่งที่ผิด pip3 ของฉันเรียกตัวเองว่าเพียงแค่ pip ในเอาต์พุตความช่วยเหลือ แต่ pip ธรรมดาจะติดตั้งแพ็คเกจ Python 2 ในระบบของฉัน ฉันคิดว่าstackoverflow.com/a/40832677/188108ถูกต้องอย่างน้อยก็เห็นด้วยกับข้อสังเกตของฉัน
Torsten Bronger

มันเปลี่ยนแปลงสภาพแวดล้อมและวิธีการติดตั้ง python คำตอบนี้คือการให้เบาะแสในการรู้ว่า pip ทำงานอย่างไรและตอบสถานการณ์ของผู้ถาม หากระบบของคุณไม่เหมือนกันคุณยังคงสามารถใช้วิธีเดียวกันนี้เพื่อหาสาเหตุได้ ไม่ได้หมายความว่ามันเป็นคำตอบที่ผิด
CSJ

1
ฉันสงสัย. ฉันไม่มี Mac แต่ในรสชาติของ Ubuntu ที่ฉันทดสอบตัวแปร pip ไม่ใช่ symlink แต่เป็นสคริปต์ Python ขนาดเล็กที่แตกต่างกันเฉพาะในบรรทัด shebang
Torsten Bronger

ใช่นั่นคือสิ่งที่ฉันหมายถึงการเปลี่ยนแปลงสภาพแวดล้อมและวิธีที่คุณติดตั้ง python (brew, apt, pyenv, คอมไพล์ด้วยตนเอง ฯลฯ ) และสำหรับสถานการณ์ของผู้ถามนั่นเป็นเพราะมันเป็นซอฟต์ลิงค์และเราใช้ls -lและpip showตรวจสอบเหตุผล และแน่นอนคำตอบนี้คือการตอบคำถามของเขา
CSJ

ฉันไม่คิดว่ามีลิงก์สัญลักษณ์ในคอมพิวเตอร์ของผู้ถาม ฉันไม่พบข้อมูลอ้างอิงใด ๆ ว่า pip เคยทำงาน / ทำงานในลักษณะนี้
Torsten Bronger

26

หากคุณมี python 2.x แล้วติดตั้ง python3 pip ของคุณจะชี้ไปที่ pip3 คุณสามารถตรวจสอบว่าด้วยการพิมพ์ซึ่งจะเป็นเช่นเดียวกับpip --versionpip3 --version

ในระบบของคุณที่คุณมีในขณะนี้pip, pip2 และ pip3

หากคุณต้องการคุณสามารถเปลี่ยน pip ให้ชี้ไปที่ pip2 แทน pip3 ได้


1
คุณจะเปลี่ยนมันอย่างไร
ahnbizcad

3
@ahnbizcad วิธีที่ง่ายที่สุดคือการกำหนดนามแฝงเช่นนี้ alias pip = "pip3"
apadana

2
ฉันทำสิ่งนี้ แต่ pip3 ของฉันเป็น v9 เมื่อ pip เป็น v10 ดังนั้นฉันจึงพิมพ์pip3 install --upgrade pipและทำให้ทั้ง v10
Kevin Danikowski

2
คำตอบนี้ผิด pip จะไม่ชี้ไปที่ pip3 pip จะติดตั้งแพ็คเกจ Python 2 และ pip3 จะติดตั้งแพ็คเกจ Python 3 ทดสอบกับ Lubuntu 18.10
Torsten Bronger

@TorstenBronger ลำดับของการติดตั้ง python ในสภาพแวดล้อมของคุณคืออะไร?
apadana

14

เมื่อคุณติดตั้งpython3, pip3รับการติดตั้ง และถ้าคุณไม่ได้มีการติดตั้งหลามอื่น (เช่น python2.7) แล้วการเชื่อมโยงจะถูกสร้างขึ้นซึ่งจุดที่จะpippip3

ดังนั้นpipลิงก์ไปยังpip3หากไม่มีการติดตั้ง python เวอร์ชันอื่น (นอกเหนือจาก python3) pipโดยทั่วไปจะชี้ไปที่การติดตั้งครั้งแรก


7

นี่เป็นเรื่องที่ยุ่งยาก ในท้ายที่สุดหากคุณเรียกpipมันจะเรียกอย่างใดอย่างหนึ่งpip2หรือpip3ขึ้นอยู่กับว่าคุณตั้งค่าระบบของคุณอย่างไร


6

ตามภาพประกอบ:

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

ดังนั้นฉันใน python ระบบเริ่มต้นของฉัน (Python 3.7.3) pip คือ pip3 .


5

ผมคิดว่าpip, pip2และpip3ไม่ได้เชื่อมโยงไปยังเส้นทางที่อ่อนนุ่มแฟ้มที่ปฏิบัติการเดียวกัน สังเกตคำสั่งนี้และผลลัพธ์ในเทอร์มินัล linux ของฉัน:

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)

อย่างที่คุณเห็นว่ามีอยู่ในเส้นทางที่แตกต่างกัน

pip3 ทำงานบนสภาพแวดล้อม Python3 เท่านั้นเช่นเดียวกับที่ pip2 ทำกับ Python2 pip ทำงานบนสภาพแวดล้อมใดก็ตามที่เหมาะสมกับบริบท ตัวอย่างเช่นหากคุณอยู่ใน Python3 venv pip จะทำงานบนสภาพแวดล้อม Python3


ฉันจะบอกว่ามันทำให้เข้าใจผิดเล็กน้อยที่จะบอกว่า pip เชื่อมโยงกับสภาพแวดล้อมใด ๆ ที่เหมาะสมกับบริบท ในกรณีของ venv pip ที่เรียกใช้งานได้เฉพาะกับ venv ไม่ใช่ระบบ เว้นแต่คุณจะติดตั้ง python หลายเวอร์ชันใน venv เดียวกันฉันไม่เห็นปัญหานี้เกิดขึ้นที่นั่น เมื่อไม่ใช้ venv เวอร์ชันของ pip ที่ใช้นั้นบางครั้งก็ไม่ได้ใช้งานง่ายและขึ้นอยู่กับการกำหนดค่าของระบบของคุณ (มักจะถูกกำหนดโดยเวอร์ชันของ python ที่ติดตั้งก่อนตามที่คนอื่น ๆ กล่าวไว้) แต่ Pip ไม่มีปัญญาที่จะใช้ในการเลือกเวอร์ชันแบบไดนามิก
Luke Baumann

3

หากคุณติดตั้ง Python 2.7 ฉันคิดว่าคุณสามารถใช้pip2และpip2.7ติดตั้งแพ็คเกจสำหรับ Python 2 โดยเฉพาะเช่น

pip2 install some_pacakge

หรือ

pip2.7 install some_package

และคุณอาจใช้pip3หรือpip3.5เพื่อติดตั้ง pacakges โดยเฉพาะสำหรับ Python 3


1

บนอินสแตนซ์ Windows ของฉัน - และฉันไม่เข้าใจสภาพแวดล้อมของฉันอย่างเต็มที่ - การใช้ pip3 เพื่อติดตั้งแพ็คเกจ kaggle-cli ใช้งานได้ - ในขณะที่ pip ไม่ได้ ฉันทำงานในสภาพแวดล้อมคอนดาและสภาพแวดล้อมดูเหมือนจะแตกต่างกัน

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

pip 9.0.1 จาก C: \ ProgramData \ Anaconda3 \ envs \ fastai \ lib \ site-Packages (python 3.6)

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

pip 9.0.1 จาก c: \ users \ redact \ appdata \ local \ programs \ python \ python36 \ lib \ site-Packages (python 3.6)


0

ด้วย Python 3.6 Virtualenv ที่เปิดใช้งานในsomepath / venvนามแฝงต่อไปนี้ได้แก้ไขปัญหาต่างๆใน macOS Sierra โดยที่ pip ยืนยันว่าจะชี้ไปที่ 2.7 Python ของ Apple

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

สิ่งนี้ใช้งานได้ไม่ดีนักเมื่อฉันต้องทำsudo pipเนื่องจากผู้ใช้รูทไม่รู้อะไรเกี่ยวกับนามแฝงหรือ Virtualenv ของฉันดังนั้นฉันจึงต้องเพิ่มนามแฝงพิเศษเพื่อจัดการสิ่งนี้ด้วย มันเป็นการแฮ็ก แต่ใช้งานได้และฉันรู้ว่ามันทำอะไร:

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

พื้นหลัง:

ไม่มี pip3 เพื่อเริ่มต้น ( ไม่พบคำสั่ง ) และwhich pipจะส่งคืน/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pip , Apple Python

Python 3.6 ถูกติดตั้งผ่าน macports

หลังจากเปิดใช้งาน 3.6 Virtualenv ที่ฉันต้องการใช้งานwhich pythonจะส่งคืนsomepath / venv / bin / python

อย่างใดpip installจะทำในสิ่งที่ถูกต้องและเข้าชม Virtualenv ของฉัน แต่pip listจะสั่นสะเทือนแพ็คเกจ Python 2.7

สำหรับ Python นี่เป็นการตีลูกที่ต่ำกว่าความคาดหวังของฉันในแง่ของความเป็นมิตรกับผู้เริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.