pip ou pip3 para instalar pacotes para Python 3?

121

Eu tenho um Macbook com OS X El Captain. Acho que Python 2.7vem pré-instalado nele. Porém, eu instalei Python 3.5também. Quando comecei a usar Python 3, li que se quiser instalar um pacote, devo digitar:

pip3 install some_package

Enfim, agora quando eu uso

pip install some_package

Eu sou some_packageinstalado para Python 3. Quer dizer, posso importá-lo e usá-lo sem problemas. Além disso, quando eu digitar apenas pip3em Terminal, eu tenho essa mensagem sobre o uso:

Usage:   
  pip <command> [options]

que é a mesma mensagem que recebo quando digito apenas pip.

Isso significa que em versões previos, as coisas eram diferentes, e agora pipe pip3podem ser usados alternadamente? Em caso afirmativo, e por uma questão de argumento, como posso instalar pacotes para em Python 2vez de Python 3?

Ammar Alyousfi
fonte

Respostas:

74

Seu pipé um link virtual para o mesmo caminho de arquivo executável com pip3. você pode usar os comandos abaixo para verificar onde o seu pipe pip3caminhos reais são:

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

Você também pode usar os comandos abaixo para saber mais detalhes:

$ pip show pip
$ pip3 show pip

Quando instalamos diferentes versões do python, podemos criar tais links virtuais para

  • definir pip padrão para alguma versão.
  • faça links diferentes para versões diferentes.

É a mesma situação com python, python2,python3

Mais informações abaixo se você estiver interessado em como isso acontece em diferentes casos:

CSJ
fonte
1
Acho que isso está errado. Meu pip3 também se chama apenas pip em sua saída de ajuda, mas o pip simples instala pacotes Python 2 no meu sistema. Acho que stackoverflow.com/a/40832677/188108 está correto, pelo menos concorda com minhas observações.
Torsten Bronger
muda em qual ambiente e como você instala o python, esta resposta é para dar uma idéia de como saber como funciona o pip e para responder à situação do questionador. se não for o mesmo em seu sistema, você ainda pode usar a mesma maneira para descobrir o porquê. não significa que seja uma resposta errada.
CSJ
1
Eu duvido disso. Não tenho Mac, mas nos sabores do Ubuntu que testei, as variantes do pip não são links simbólicos. Em vez disso, eles são pequenos scripts Python que diferem apenas na linha shebang.
Torsten Bronger
sim, é isso que quero dizer, muda no ambiente e na forma como você instala o python (brew, apt, pyenv, compila manualmente, etc) e para a situação do questionador é porque são links virtuais, e usamos ls -le pip showpara verificar o motivo. e, claro, essa resposta é para responder à sua pergunta.
CSJ
Acho que não havia links simbólicos no computador do questionador. Não encontro nenhuma referência de que o pip já funcionou / funciona dessa maneira.
Torsten Bronger
26

Se você tinha o python 2.xe instalou o python3, seu pip apontará para o pip3. você pode verificar isso digitando pip --versionqual seria o mesmo que pip3 --version.

Em seu sistema você agora tem pip, pip2 e pip3 .

Se você quiser, pode alterar pip para apontar para pip2 em vez de pip3.

Apadana
fonte
1
como você muda isso
ahnbizcad
3
@ahnbizcad A maneira mais fácil é definir um alias como este: alias pip = "pip3"
apadana
2
Eu fiz isso, mas meu pip3 era v9 quando pip era v10, então eu digitei pip3 install --upgrade pipe ele fez ambos v10
Kevin Danikowski
2
Esta resposta está errada. pip não apontará para pip3. pip instalará pacotes Python 2 e pip3 instalará pacotes Python 3. Testado em Lubuntu 18.10.
Torsten Bronger
@TorstenBronger qual era a ordem das instalações do Python em seu ambiente?
apadana
14

Quando você instala python3, pip3é instalado. E se você não tiver outra instalação do python (como python2.7), um link é criado apontando pippara pip3.

O mesmo pipocorre com um link parapip3 se não houver outra versão do python instalada (além do python3). pipgeralmente aponta para a primeira instalação.

Ani Menon
fonte
7

Este é um assunto complicado. No final, se você invocar, pipele invocará pip2ou pip3, dependendo de como você configurou seu sistema.

Max Uppenkamp
fonte
6

Por ilustração:

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

Portanto, no meu sistema padrão python (Python 3.7.3), pip é pip3 .

Victoria Stuart
fonte
5

Eu acho pip, pip2e pip3não são links de software para o mesmo caminho de arquivo executável. Observe estes comandos e os resultados em meu terminal 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)

Como você vê, eles existem em caminhos diferentes.

pip3 sempre opera apenas no ambiente Python3, como pip2 faz com Python2. pip opera em qualquer ambiente apropriado ao contexto. Por exemplo, se você estiver em um venv Python3, o pip operará no ambiente Python3.

Mohammad Reza
fonte
Eu diria que é um pouco enganoso dizer que o pip está vinculado a qualquer ambiente apropriado para o contexto. No caso do venv, o executável pip é específico do venv e não do sistema. A menos que você tenha instalado várias versões do python no mesmo local, não consigo ver esse problema surgindo aí. Quando não estiver usando um venv, a versão do pip usado às vezes não é intuitiva e depende da configuração do seu sistema (geralmente é determinado por qual versão do python foi instalada primeiro, como outros disseram). Mas Pip não tem nenhuma inteligência que usa para selecionar uma versão dinamicamente
Luke Baumann
3

Se você instalou o Python 2.7, acho que poderia usar pip2epip2.7 instalar pacotes especificamente para Python 2, como

pip2 install some_pacakge

ou

pip2.7 install some_package

E você pode usar pip3ou pip3.5instalar pacotes especificamente para Python 3.

Mikeqfu
fonte
1

Na minha instância do Windows - e eu não entendo totalmente o meu ambiente - usar pip3 para instalar o pacote kaggle-cli funcionou - enquanto pip não. Eu estava trabalhando em um ambiente de conda e os ambientes parecem ser diferentes.

(fastai) C: \ Usuários \ redact \ Downloads \ fast.ai \ deeplearning1 \ nbs> pip - versão

pip 9.0.1 de C: \ ProgramData \ Anaconda3 \ envs \ fastai \ lib \ site-packages (python 3.6)

(fastai) C: \ Usuários \ redact \ Downloads \ fast.ai \ deeplearning1 \ nbs> pip3 - versão

pip 9.0.1 de c: \ users \ redact \ appdata \ local \ programs \ python \ python36 \ lib \ site-packages (python 3.6)

PM
fonte
0

Dado um Python 3.6 virtualenv ativado em somepath / venv , os seguintes aliases resolveram os vários problemas em um macOS Sierra onde pip insistia em apontar para o 2.7 Python da Apple.

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

Isso não funcionou tão bem quando eu tive que fazer sudo pipporque o usuário root não sabe nada sobre meu alias ou o virtualenv, então eu tive que adicionar um alias extra para lidar com isso também. É um hack, mas funciona e eu sei o que faz:

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

fundo:

pip3 não existia para iniciar ( comando não encontrado ) com e which pipretornaria /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pip , o Apple Python.

Python 3.6 foi instalado por meio de macports.

Após a ativação do 3.6 virtualenv com o qual eu queria trabalhar, which pythonretornaria somepath / venv / bin / python

De alguma forma pip install, faria a coisa certa e atingiria meu virtualenv, mas pip listdesencadearia pacotes do Python 2.7.

Para Python, isso está muito abaixo de minhas expectativas em termos de facilidade de uso para iniciantes.

JL Peyret
fonte