Por que “pip install” dentro do Python gera um SyntaxError?

232

Estou tentando usar o pip para instalar um pacote. Eu tento executar a pip installpartir do shell Python, mas recebo um SyntaxError. Por que eu recebo esse erro? Como uso o pip para instalar o pacote?

>>> pip install selenium
              ^
SyntaxError: invalid syntax
Nacht
fonte

Respostas:

297

O pip é executado na linha de comando, não no interpretador Python. É um programa que instala módulos, para que você possa usá-los no Python. Depois de instalar o módulo, você pode abrir o shell Python e fazer import selenium.

O shell Python não é uma linha de comando, é um intérprete interativo. Você digita o código Python nele, não comandos.

Lennart Regebro
fonte
2
Obrigado pelo esclarecimento, mas ainda não consigo executá-lo. Onde é exatamente? Ele está me dando um erro "pip não é reconhecido" (porque eu não sou o diretório certo). Foi instalado em \ site-packages mas eu estou procurando pensava isso e eu não consigo encontrar nenhuma pip.exe
Nacht
25
@Nacht - pipestará no diretório de scripts da sua instalação python, portanto você desejará adicioná-lo ao seu caminho. Adicione C:\Python32\scriptsao seu PATH. Altere o caminho conforme necessário, com base em onde você o instalou.
Wkl
3
Na verdade, o pip.exe no Windows é um script python como outros no diretório / scripts, mas encapsulado em exe para executá-lo com o interpretador python padrão. Ao abrir o pip.exe com o 7-zip, você pode ver os principais módulos de importação de pip, sys e re ... (e você encontrará a resposta de como executá-lo em um shell python) -> pip é um arquivo regular módulo python. Não esqueça que o Windows não era a primeira plataforma que suporta python, o Linux era, e aí o Python faz parte do sistema operacional.
Zydnar 07/04
1
Eu sei que tive que fazer isso na linha de comando (não na linha de comando python). Isso foi depois de alterar o diretório para o local do python.exe e, em seguida, foi necessário colocar o tipo de arquivo no pip3. No meu caso, eu estava atrás de pedidos de trabalho HTTP. A saber: python pip3.exe instalar solicitações <--- isso funcionou perfeitamente, repetiu o mesmo para o módulo pytz
natur3
106

Use a linha de comando, não o shell Python (DOS, PowerShell no Windows).

C:\Program Files\Python2.7\Scripts> pip install XYZ

Se você instalou o Python no PATH usando os instaladores mais recentes, não precisará estar nessa pasta para executar o pip

Terminal no Mac ou Linux

$ pip install XYZ
ruxming
fonte
3
Obrigado por incluir o C: ...., me ajudou a perceber para onde precisava fazer o cd, pois você não pode simplesmente abrir a linha de comando e digitar pip.
hammythepig
2
Para sua informação, a instalação do Python que acabei de definir NÃO definiu o arquivo PATH. Eu tinha que fazer isso manualmente, apontando para o caminho de instalação em%APPDATA%
UuDdLrLrSs
61

Como o @sinoroc sugeriu que a maneira correta de instalar um pacote via pip está usando um processo separado, pois o pip pode causar o fechamento de um encadeamento ou pode exigir uma reinicialização do intérprete para carregar o novo pacote instalado, portanto esta é a maneira correta de usar a API: subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'SomeProject'])mas como o Python permite para acessar a API interna e você sabe para que está usando a API, convém usar a API interna de qualquer maneira, por exemplo. se você estiver criando um gerenciador de pacotes da GUI com recursos alternativos, como https://www.lfd.uci.edu/~gohlke/pythonlibs/

O soulution a seguir está DESATUALIZADO, em vez de reduzir a votação, sugerir atualizações. consulte https://github.com/pypa/pip/issues/7498 para obter referência.


ATUALIZAÇÃO : A partir da versão pip 10.x não há mais get_installed_distributions()ou mainmétodo em import pip vez usar import pip._internal as pip .

ATUALIZAÇÃO ca. v.18 get_installed_distributions() foi removido. Em vez disso, você pode usar um gerador freezecomo este:

from pip._internal.operations.freeze import freeze

print([package for package in freeze()])

# eg output ['pip==19.0.3']


Se você deseja usar o pip dentro do interpretador Python, tente o seguinte:

import pip

package_names=['selenium', 'requests'] #packages to install
pip.main(['install'] + package_names + ['--upgrade']) 
# --upgrade to install or update existing packages

Se você precisar atualizar todos os pacotes instalados, use o seguinte:

import pip

for i in pip.get_installed_distributions():
    pip.main(['install', i.key, '--upgrade'])

Se você deseja parar de instalar outros pacotes se alguma instalação falhar, use-o em uma única pip.main([])chamada:

import pip

package_names = [i.key for i in pip.get_installed_distributions()]
pip.main(['install'] + package_names + ['--upgrade'])

Nota : Quando você instala da lista no arquivo com -r/ --requirementparâmetro, NÃO precisa da função open ().

pip.main(['install', '-r', 'filename'])

Aviso : Alguns parâmetros simples --helppodem fazer com que o interpretador python seja interrompido.

Curiosidade: Ao usar, pip.exevocê realmente usa o interpretador python e o módulo pip de qualquer maneira. Se você descompactar pip.exeou pip3.exenão importar o python 2.x ou 3.x, o interior será o mesmo arquivo único __main__.py:

# -*- coding: utf-8 -*-
import re
import sys

from pip import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(main())
Zydnar
fonte
5
Isso funciona no shell Python, então acho que deve ser a resposta aceita.
François M.
5
Isso é exatamente o que eu esperava encontrar ao pesquisar esse problema no Google.
Andrew Brēza
1
Ótima resposta, e ela definitivamente deve ser incluída aqui, mas eu discordo que deve ser a resposta aceita, pois o usuário estava claramente tentando fazer com que a onipresente sintaxe "pip install" funcionasse agora. Como essa sintaxe não funcionará com esse método, ela não resolve diretamente esse problema. Pode ser mais útil do que a resposta aceita embora :)
Dan
Não faço ideia do que realmente significava OP, mas essa resposta foi realmente tardia, portanto, não é importante se é aceito aqui.
Zydnar 22/02
@Zydnar, concordou - minha resposta foi a François, que disse que essa deveria ser a resposta aceita. Eu postei meu raciocínio sobre o porquê não. Dito isto, ainda acho que este é um ótimo post.
Dan
53

Para executar o pip no Python 3.x, basta seguir as instruções na página do Python: Instalando os módulos do Python .

python -m pip install SomePackage

Observe que isso é executado na linha de comando e não no shell python (o motivo do erro de sintaxe na pergunta original).

Dan
fonte
1
Ainda estou recebendo sintaxe inválida. Estou usando o IPython em um PC com Windows 10. Alguma ideia?
DataGirl 3/16
Esta página possui instruções para instalar o IPython: ipython.readthedocs.io/en/stable/install/index.html $ pip install ipython. Presumivelmente, que se traduziria em $ python -m pip instalar ipython
Dan
1
Isso não responde nada sobre o erro de sintaxe
OneCricketeer
Isso já foi coberto por outras respostas, mas eu o adicionei agora. Minha resposta foi apenas um complemento para 3.x.
Dan
trabalhou para mim no Windows 10 - também aconselhou-me a atualizar pip como por comentário anterior :)
Kdean571
2

Inicialmente, eu também enfrentei esse mesmo problema, instalei o python e, quando executo o pipcomando, ele me lançava um erro como mostrado na foto abaixo.

insira a descrição da imagem aqui

Verifique se o caminho do pip é adicionado nas variáveis ​​ambientais. Para mim, o caminho de instalação do python e do pip é ::
Python: C:\Users\fhhz\AppData\Local\Programs\Python\Python38\
pip: C:\Users\fhhz\AppData\Local\Programs\Python\Python38\Scripts
esses dois caminhos foram adicionados ao caminho em variáveis ​​ambientais.

Agora abra uma nova janela do cmd e digite pip, você deverá ver uma tela como abaixo.

insira a descrição da imagem aqui

Agora digite pip install <<package-name>>. Aqui estou instalando o pacote spyder para que minha declaração de linha de comando seja como pip install spydere aqui vai minha tela de execução.

insira a descrição da imagem aqui

e espero que terminemos com isso !!

homem
fonte
1
Isso não responde à pergunta.
sinoroc 20/02
0

você precisa digitá-lo no cmd, não no IDLE. porque IDLE não é um prompt de comando se você deseja instalar algo do IDLE, digite este

>>>from pip.__main__ import _main as main
>>>main(#args splitted by space in list example:['install', 'requests'])

isso está chamando pip como pip <commands>no terminal. Os comandos serão separados por espaços para os quais você está fazendo lá.

Matthijs990
fonte
Esta é uma resposta desatualizada, desde a versão 10.0 do pip. ImportError: cannot import name mainusando pip v19.0.3
Zydnar
-1

Programaticamente, o seguinte funciona atualmente . Vejo todas as respostas postadas 10.0 e todas, mas nenhuma delas é o caminho correto para mim. No Kaggle, com certeza, essa abordagem funciona

from pip._internal import main as _main

package_names=['pandas'] #packages to install
_main(['install'] + package_names + ['--upgrade']) 
demongolem
fonte
por que não usar jusy: from pip .__ main__ import _main?
Matthijs990
-3

Tente atualizar o pip com o comando abaixo e tente novamente

python -m pip install -U pip
Karthik
fonte
uma atualização de pip não vai deixá-lo trabalhar no shell python
Matthijs990