O Python possui um sistema de gerenciamento de pacotes / módulos?

145

O Python tem um sistema de gerenciamento de pacotes / módulos, semelhante ao Ruby onde você pode fazer rubygems gem install packagename?

Em Instalando módulos Python , apenas vejo referências a python setup.py install, mas isso exige que você encontre o pacote primeiro.

tommy chheng
fonte
3
Se você acha que o índice de pacotes do Python, o PyPI deve ter instruções mais claras sobre como instalar pacotes, vote e comente sobre o problema em bitbucket.org/pypa/pypi/issue/149/…
Coronel Panic
Embora estivesse atual no momento, o link nesta pergunta agora é para a documentação dos distutils herdados. Eu arquivei bugs.python.org/issue26014 para cobrir que esses documentos precisa ser mais clara que já não adequado para uso como documentação do usuário final são (eles estão apenas mantido em torno para o benefício dos implementadores de ferramentas).
Ncoghlan

Respostas:

213

Progresso recente

Março de 2014 : Boas notícias! O Python 3.4 é fornecido com o Pip. Pip é o gerente de pacotes padrão de fato do Python. Você pode instalar um pacote como este:

pip install httpie

Wahey! Este é o melhor recurso de qualquer versão do Python. Torna a riqueza de bibliotecas da comunidade acessível a todos. Os iniciantes não são mais excluídos do uso de bibliotecas da comunidade pela dificuldade proibitiva de configuração.

No entanto , ainda existem várias frustrações excelentes com a experiência de empacotamento do Python. Cumulativamente, eles tornam o Python muito hostil para iniciantes. Além disso, a longa história de negligência (ou seja, não remessa com um gerenciador de pacotes por 14 anos do Python 2.0 ao Python 3.3) prejudicou a comunidade. Eu descrevo os dois abaixo.

Frustrações extraordinárias

É importante entender que, embora usuários experientes possam solucionar essas frustrações, eles são barreiras significativas para pessoas novas no Python. De fato, a dificuldade e a hostilidade geral do usuário provavelmente impedirão muitos deles.

O site do PyPI é contra-útil

Todo idioma com um gerenciador de pacotes possui um repositório oficial (ou quase oficial) para a comunidade fazer o download e publicar pacotes. Python possui o Índice de Pacotes Python, PyPI. https://pypi.python.org/pypi

Vamos comparar suas páginas com as do RubyGems e Npm (o gerenciador de pacotes Node).

  1. https://rubygems.org/gems/rails Página RubyGems para o pacoterails
  2. https://www.npmjs.org/package/express página Npm para o pacoteexpress
  3. https://pypi.python.org/pypi/simplejson/ página de PyPI para o pacotesimplejson

Você verá as páginas RubyGems e Npm, ambas com uma descrição de uma linha do pacote e instruções grandes e amigáveis ​​sobre como instalá-lo.

Enquanto isso, ai de qualquer usuário infeliz do Python que navegue ingenuamente para o PyPI. Em https://pypi.python.org/pypi/simplejson/ , eles não encontrarão essas instruções úteis. No entanto, existe um grande link verde 'Download'. Não é razoável segui-lo. Aha, eles clicam! O navegador deles baixa um .tar.gzarquivo. Muitos usuários do Windows nem conseguem abri-lo, mas, se perseverarem, poderão extraí-lo e, em seguida, executar setup.pye eventualmente com a ajuda do Google setup.py install. Alguns vão desistir e reinventar a roda ..

Claro, tudo isso está errado. O mais fácil maneira fácil de instalar um pacote é com um comando Pip. Mas o PyPI nem mencionou Pip. Em vez disso, levou-os a um caminho arcaico e tedioso.

Erro: Não foi possível encontrar vcvarsall.bat

Numpy é uma das bibliotecas mais populares do Python. Tente instalá-lo com o Pip, você recebe esta mensagem de erro enigmática:

Erro: Não foi possível encontrar vcvarsall.bat

Tentando corrigir essa é uma das perguntas mais populares sobre o estouro de pilha: " erro: não foi possível encontrar vcvarsall.bat "

Poucas pessoas conseguem.

Para comparação, na mesma situação, Ruby imprime esta mensagem, que explica o que está acontecendo e como corrigi-lo:

Atualize seu PATH para incluir ferramentas de construção ou faça o download do DevKit em http://rubyinstaller.org/downloads e siga as instruções em http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Publicar pacotes é difícil

Ruby e Nodejs são fornecidos com gerenciadores de pacotes com todos os recursos, Gem (desde 2007) e Npm (desde 2011), e nutriram comunidades de compartilhamento centradas no GitHub. O Npm facilita a publicação de pacotes , pois já possui pacotes de 64k . RubyGems lista pacotes de 72k . O venerável índice de pacotes Python lista apenas 41k .

História

Seguindo o lema " baterias incluídas ", o Python foi enviado sem um gerenciador de pacotes até 2014.

Até Pip, o padrão de fato era um comando easy_install. Foi lamentavelmente inadequado. O comando não era para desinstalar pacotes.

Pip foi uma grande melhoria. Tinha a maioria dos recursos da Ruby Gem. Infelizmente, Pip era - até recentemente - ironicamente difícil de instalar. De fato, o problema continua sendo uma das principais perguntas do Python no Stack Overflow: " Como instalo o pip no Windows? "

Coronel Panic
fonte
3
Para qualquer pessoa interessada, o PEP 439 está propondo uma maneira de otimizar o processo de instalação do pip, embora eu ache que esse PEP seja apenas parte de uma estratégia mais ampla que está sendo analisada. Veja também a discussão aqui .
Cartroo
3
@Cartroo são ótimas notícias! Python merece um gerenciador de pacotes, espero que os desenvolvedores possam fazer isso acontecer.
Coronel Panic
Absolutamente, há muito tempo. Eu definitivamente espero que ele entre no Python 3.4, pelo menos. Infelizmente, duvido muito que ele acabe sendo portado para 2.x, mas há pelo menos luz no fim do túnel. Vamos só espero que não é um dragão que se aproxima ... (^_^)
Cartroo
6
Em defesa do Python, linguagens mais recentes, como Ruby e Node, tiveram a sorte de poder observar os erros de idiomas anteriores e evitá-los. Dito isso, eu realmente gostaria que o gerenciamento de pacotes no Python recebesse mais amor e carinho, por isso estou feliz em ver o PEP 439 como apontado pelo @Cartroo.
Dennis
Concordo que o gerenciamento de pacotes do Ruby é uma coisa maravilhosa da minha perspectiva (do usuário final) .. gem install Xparece funcionar em todas as plataformas. Então, como eles gerenciaram isso para gemas que exigem compilação de código C no Windows?
BSA
64

O Python Package Index (PyPI) parece ser padrão:

  • Para instalar um pacote: pip install MyProject
  • Para atualizar um pacote pip install --upgrade MyProject
  • Para corrigir uma versão de um pacotepip install MyProject==1.0

Você pode instalar o gerenciador de pacotes da seguinte maneira:

curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py
easy_install pip

Referências:

Thomas Bratt
fonte
3
Esta é a resposta moderna.
Gringo Suave
6
Pesquisei na internet por 20 minutos e essa resposta não chegou a lugar algum. Muito obrigado. Além disso, tenho sérias dúvidas sobre o uso de python se a documentação é este mau ... isso deve estar na página principal Python ou acessível a partir do Google ou algo
Chris J
63

E apenas para fornecer um contraste, há também pip .

Ignacio Vazquez-Abrams
fonte
2
obrigado! por que o pip não é mencionado na página de documentação de instalação dos módulos python?
tommy Chheng
Observe que o pip não suporta ovos, ele instala apenas pacotes de origem. De um modo geral, o pip faz muitas coisas muito melhores que o easy_install, mas é provável que o easy_install seja instalado por padrão na maioria dos unixes, e o pip não.
Jeffrey Harris
8
@ Tommy Right! Se os desenvolvedores do Python se preocupassem com a experiência do usuário, eles enviariam o Python com um gerenciador de pacotes (como o pip). Ruby é enviado com Gem e Nodejs com Npm. stackoverflow.com/a/13445719/284795
Coronel Panic
21

Como desenvolvedor de Ruby e Perl e aprendiz de Python, não achei easy_install ou pip o equivalente a RubyGems ou CPAN.

Costumo manter meus sistemas de desenvolvimento executando as versões mais recentes dos módulos à medida que os desenvolvedores os atualizam e congelar meus sistemas de produção em versões definidas. Tanto o RubyGems quanto o CPAN facilitam a localização de módulos, listando o que está disponível, instale e atualize-os posteriormente individualmente ou em massa, se desejado.

easy_install e pip facilitam a instalação de um módulo UMA vez que o localizei por meio de uma pesquisa no navegador ou aprendi sobre ele por outros meios, mas eles não me dizem o que está disponível. Posso nomear explicitamente o módulo a ser atualizado, mas os aplicativos não me dizem o que foi atualizado nem atualizarão tudo em massa, se eu quiser.

Portanto, a funcionalidade básica está presente no pip e no easy_install, mas há alguns recursos que eu gostaria de ver que os tornariam mais amigáveis ​​e fáceis de usar, além do CPAN e do RubyGems.

o homem de lata
fonte
Esta resposta está agora bem e verdadeiramente desatualizada.
Ncoghlan
11

A partir do final de 2014, a distribuição Anaconda Python da Continuum Analytics com o gerenciador de pacotes conda deve ser considerada. Ele resolve a maioria dos problemas sérios que as pessoas enfrentam com o Python em geral (gerenciando diferentes versões do Python, atualizando versões do Python, gerenciamento de pacotes, ambientes virtuais, compatibilidade com Windows / Mac) em um download coeso.

Ele permite fazer praticamente tudo o que você poderia querer com o Python sem precisar alterar o sistema. Minha próxima solução preferida é o pip + virtualenv, mas você precisa instalar o virtualenv no Python do sistema (e o Python do sistema pode não ser a versão desejada) ou criar a partir da fonte . O Anaconda torna todo esse processo o clique de um botão, além de adicionar vários outros recursos.

anderspitman
fonte
7

Isso seria fácil de instalar .

Kirk Strauser
fonte
1
Se você deseja reduzir o voto de todos na página que disseram easy_install, verifique primeiro as datas. Esse foi um conselho válido quando foi dado quase 7 anos atrás . Eu não acho que em nós, respondedores, vamos revisitar isso regularmente para atualizar, portanto a redução de votos é uma bobagem.
precisa
6

Chama-se setuptools. Você o executa com o comando "easy_install".

Você pode encontrar o diretório em http://pypi.python.org/

Chris Long
fonte
5

Não vejo o MacPorts nem o Homebrew mencionados em outras respostas aqui, mas como os vejo mencionados em outras partes do Stack Overflow para questões relacionadas, adicionarei meus próprios US $ 0,02 que muitas pessoas parecem considerar o MacPorts como não apenas um pacote gerenciador de pacotes em geral (até hoje eles listam 16311 pacotes / portas, 2931 correspondentes a "python", embora apenas para Macs), mas também como um gerenciador de pacotes decente (talvez melhor) para pacotes / módulos Python:

Questão

"... qual é o método usado pelos desenvolvedores de python para gerenciar seus módulos?"

Respostas

SciPy

"Macs (ao contrário do Linux) não vêm com um gerenciador de pacotes, mas existem alguns gerenciadores de pacotes populares que você pode instalar. Macports ..."

Ainda estou discutindo se devo ou não usar o MacPorts, mas, no momento, estou inclinado nessa direção.

Osteoboon
fonte
1
O próprio Homebrew diz: Você pode instalar pacotes Python com (o easy_install desatualizado ou) pip install <your_favorite_package>
Simone
4

No Windows, instale http://chocolatey.org/ e

choco install python

Abra uma nova janela de cmd com o PATH atualizado. Em seguida, faça

choco install pip

Depois disso você pode

pip install pyside
pip install ipython
...
hansvb
fonte
Eu queria responder isso como um comentário à resposta de Thomas Bratt, mas eu não tenho reputação suficiente ...
hansvb
3

Como ninguém mencionou o pipenv aqui, eu gostaria de descrever meus pontos de vista por que todos deveriam usá-lo para gerenciar pacotes python.

Como o @ColonelPanic mencionou, há vários problemas com o Python Package Index e também com o pip e o virtualenv .

O Pipenv resolve a maioria dos problemas com o pip e fornece recursos adicionais também.

Recursos do Pipenv

O Pipenv pretende substituir o pip e o virtualenv, o que significa que o pipenv criará automaticamente um ambiente virtual separado para cada projeto, evitando conflitos entre diferentes versões python / versões de pacotes para diferentes projetos.

  • Permite compilações verdadeiramente determinísticas, especificando facilmente apenas o que você deseja.
  • Gera e verifica hashes de arquivo para dependências bloqueadas.
  • Instale automaticamente os Pythons necessários, se o pyenv estiver disponível.
  • Encontra automaticamente o seu projeto em casa, recursivamente, procurando um Pipfile.
  • Gera automaticamente um Pipfile, se não existir.
  • Cria automaticamente um virtualenv em um local padrão.
  • Adiciona / remove automaticamente pacotes para um Pipfile quando eles são desinstalados / instalados.
  • Carrega automaticamente arquivos .env, se existirem.

Se você já trabalhou em projetos python antes, perceberia que esses recursos tornam mais fácil o gerenciamento de pacotes.

Outros comandos

  • checkverifica vulnerabilidades de segurança e afirma que os requisitos do PEP 508 estão sendo atendidos pelo ambiente atual. ( que eu acho que é um ótimo recurso, especialmente depois disso - pacotes maliciosos no PyPi )
  • graph mostrará um gráfico de dependência, de suas dependências instaladas.

Você pode ler mais sobre isso aqui - Pipenv .

Instalação

Você pode encontrar a documentação de instalação aqui

PS: Se você gostou de trabalhar com as solicitações de pacote Python , ficaria satisfeito em saber que o pipenv é do mesmo desenvolvedor Kenneth Reitz

Vaulstein
fonte
0

Poesia é o que você está procurando. Ele cuida do gerenciamento de dependências, ambientes virtuais e execução.

0x32e0edfb
fonte