pip atau pip3 untuk menginstal paket untuk Python 3?

121

Saya memiliki Macbook dengan OS X El Captain. Saya pikir itu Python 2.7sudah diinstal sebelumnya. Namun, saya Python 3.5juga menginstal . Ketika saya mulai menggunakan Python 3, saya membaca bahwa jika saya ingin menginstal sebuah paket, saya harus mengetik:

pip3 install some_package

Pokoknya, sekarang saat saya gunakan

pip install some_package

Saya some_packageterinstal untuk Python 3. Maksud saya, saya dapat mengimpor dan menggunakannya tanpa masalah. Selain itu, ketika saya ketik saja pip3di Terminal, saya mendapat pesan ini tentang penggunaan:

Usage:   
  pip <command> [options]

yang merupakan pesan yang sama yang saya dapatkan saat saya mengetik pip.

Apakah ini berarti bahwa dalam versi sebelumnya, semuanya berbeda, dan sekarang pipdan pip3dapat digunakan secara bergantian? Jika demikian, dan demi argumen, bagaimana saya dapat menginstal paket Python 2alih - alih Python 3?

Ammar Alyousfi
sumber

Jawaban:

74

Anda pipadalah tautan lunak ke jalur file yang dapat dieksekusi yang sama dengan pip3. Anda dapat menggunakan perintah di bawah ini untuk memeriksa di mana jalur Anda pipdan yang pip3sebenarnya berada:

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

Anda juga dapat menggunakan perintah di bawah ini untuk mengetahui lebih detail:

$ pip show pip
$ pip3 show pip

Saat kami menginstal versi python yang berbeda, kami dapat membuat tautan lunak semacam itu ke

  • setel pip default ke beberapa versi.
  • buat tautan berbeda untuk versi berbeda.

Ini adalah situasi yang sama dengan python, python2,python3

Informasi lebih lanjut di bawah jika Anda tertarik tentang bagaimana hal itu terjadi dalam kasus yang berbeda:

CSJ
sumber
1
Saya pikir ini salah. Pip3 saya juga menyebut dirinya hanya pip dalam keluaran bantuannya, tetap saja, pip biasa menginstal paket Python 2 di sistem saya. Saya pikir stackoverflow.com/a/40832677/188108 benar, setidaknya itu sesuai dengan pengamatan saya.
Torsten Bronger
itu berubah pada lingkungan apa dan bagaimana Anda menginstal python, jawaban ini untuk memberi petunjuk bagaimana mengetahui cara kerja pip, dan untuk menjawab situasi penanya. jika tidak sama di sistem Anda, Anda masih dapat menggunakan cara yang sama untuk mencari tahu mengapa. bukan berarti itu jawaban yang salah.
CSJ
1
Saya meragukan itu. Saya tidak memiliki Mac tetapi pada varian Ubuntu yang saya uji, varian pip bukanlah symlink. Sebaliknya, mereka adalah skrip Python kecil yang hanya berbeda di baris shebang.
Torsten Bronger
ya, itulah yang saya maksud itu berubah pada lingkungan dan cara Anda menginstal python (brew, apt, pyenv, kompilasi secara manual, dll) dan untuk situasi penanya itu karena mereka adalah tautan lunak, dan kami menggunakan ls -ldan pip showuntuk memverifikasi alasannya. dan tentu saja, jawaban ini untuk menjawab pertanyaannya.
CSJ
Saya kira tidak ada symlink di komputer penanya. Saya tidak menemukan referensi bahwa pip pernah berfungsi / berfungsi seperti ini.
Torsten Bronger
26

Jika Anda memiliki python 2.x dan kemudian menginstal python3, pip Anda akan mengarah ke pip3. Anda dapat memverifikasinya dengan mengetik pip --versionyang akan sama dengan pip3 --version.

Di sistem Anda, Anda sekarang memiliki pip, pip2, dan pip3 .

Jika mau, Anda dapat mengubah pip ke point to pip2, bukan pip3.

apadana
sumber
1
bagaimana Anda mengubahnya
ahnbizcad
3
@ahnbizcad Cara termudah adalah dengan mendefinisikan alias seperti ini: alias pip = "pip3"
apadana
2
Saya melakukan ini, tetapi pip3 saya adalah v9 ketika pip adalah v10, jadi saya mengetik pip3 install --upgrade pipdan menghasilkan keduanya v10
Kevin Danikowski
2
Jawaban ini salah. pip tidak akan menunjuk ke pip3. pip akan menginstal paket Python 2, dan pip3 akan menginstal paket Python 3. Diuji di Lubuntu 18.10.
Torsten Bronger
@TorstenBronger apa urutan instalasi python di lingkungan Anda?
apadana
14

Saat Anda menginstal python3, pip3terinstal. Dan jika Anda tidak memiliki instalasi python lain (seperti python2.7) maka tautan yang mengarah pipke pip3.

Begitu pipjuga tautan kepip3 jika tidak ada versi lain dari python yang diinstal (selain python3). pipumumnya menunjuk ke instalasi pertama.

Ani Menon
sumber
7

Ini adalah topik yang rumit. Pada akhirnya, jika Anda memanggilnya, pipitu akan memanggil salah satu pip2atau pip3, tergantung pada bagaimana Anda mengatur sistem Anda.

Max Uppenkamp
sumber
6

Dengan ilustrasi:

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

Jadi, dalam sistem default saya python (Python 3.7.3), pip adalah pip3 .

Victoria Stuart
sumber
5

Saya pikir pip, pip2dan pip3bukan tautan lunak ke jalur file yang dapat dieksekusi yang sama. Catat perintah ini dan hasilnya di terminal linux saya:

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)

Seperti yang Anda lihat, mereka ada di jalur yang berbeda.

pip3 selalu beroperasi hanya di lingkungan Python3, seperti yang dilakukan pip2 dengan Python2. pip beroperasi pada lingkungan mana saja yang sesuai dengan konteksnya. Misalnya jika Anda menggunakan Python3 venv, pip akan beroperasi di lingkungan Python3.

Mohammad Reza
sumber
Saya akan mengatakan agak menyesatkan untuk mengatakan bahwa pip terkait dengan lingkungan apa pun yang sesuai untuk konteksnya. Dalam kasus venv, pip yang dapat dieksekusi khusus untuk venv dan bukan sistem. Kecuali Anda menginstal beberapa versi python di venv yang sama, saya tidak dapat melihat masalah ini muncul di sana. Saat tidak menggunakan venv, versi pip yang digunakan terkadang tidak intuitif dan bergantung pada konfigurasi sistem Anda (seringkali ditentukan oleh versi python mana yang diinstal pertama kali, seperti yang dikatakan orang lain). Tetapi Pip tidak memiliki kecerdasan apa pun yang digunakannya untuk memilih versi secara dinamis
Luke Baumann
3

Jika Anda menginstal Python 2.7, saya rasa Anda dapat menggunakan pip2dan pip2.7menginstal paket khusus untuk Python 2, seperti

pip2 install some_pacakge

atau

pip2.7 install some_package

Dan Anda dapat menggunakan pip3atau pip3.5menginstal pacakges khusus untuk Python 3.

mikeqfu
sumber
1

Pada contoh Windows saya - dan saya tidak sepenuhnya memahami lingkungan saya - menggunakan pip3 untuk menginstal paket kaggle-cli berfungsi - sedangkan pip tidak. Saya bekerja di lingkungan conda dan lingkungannya tampak berbeda.

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

pip 9.0.1 dari 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 dari c: \ users \ redact \ appdata \ local \ program \ python \ python36 \ lib \ site-packages (python 3.6)

SORE
sumber
0

Dengan adanya virtualenv Python 3.6 yang diaktifkan di somepath / venv , alias berikut menyelesaikan berbagai masalah pada macOS Sierra di mana pip bersikeras untuk menunjuk ke Python 2.7 Apple.

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

Ini tidak berfungsi dengan baik ketika saya harus melakukannya sudo pipkarena pengguna root tidak tahu apa-apa tentang alias saya atau virtualenv, jadi saya harus menambahkan alias tambahan untuk menangani ini juga. Ini peretasan, tetapi berhasil, dan saya tahu apa fungsinya:

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

Latar Belakang:

pip3 tidak ada untuk memulai ( perintah tidak ditemukan ) dengan dan which pipakan mengembalikan /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pip , Apple Python.

Python 3.6 diinstal melalui macports.

Setelah aktivasi 3.6 virtualenv yang ingin saya gunakan, which pythonakan mengembalikan somepath / venv / bin / python

Entah bagaimana pip installakan melakukan hal yang benar dan menekan virtualenv saya, tetapi pip listakan mengguncang paket Python 2.7.

Untuk Python, ini jauh di bawah ekspektasi saya dalam hal keramahan pemula.

JL Peyret
sumber