Por que usar python -m pip

Olá novamente. Antecipando o início de um novo tópico no curso Machine Learning , queremos compartilhar uma tradução de um artigo que seja indiretamente relacionado ao ML, mas certamente será útil para os assinantes de nosso blog.





Mariatta , uma desenvolvedora canadense, perguntou no python -m pip no Twitter, pedindo-lhe para falar sobre esse idioma e explicar como ele funciona.

Recentemente, aprendi que você precisa escrever python -m pip em vez da instalação usual do pip, mas agora não me lembro de quem ouvi falar. Provavelmente de @brettsky ou @zooba . Algum de vocês tem uma postagem no blog para que eu possa compartilhá-la com os leitores?
- Mariatta ( @mariatta ) 29 de outubro de 2019 ( https://twitter.com/mariatta/status/1189243515739561985?ref_src=twsrc%5Etfw )


Não sei ao certo o que disse a Mariatta sobre o python -m pip , mas há todas as chances de que seja eu, pois solicitei que esta instrução para instalar pacotes usando o PyPI fosse escrita dessa maneira desde 2016. Portanto, este artigo deve explicar o que é python -m pip e por que você deve usá-lo ao iniciar o pip .

O que é python -m pip?


Para iniciantes, o python -m pip executa o pip usando a versão do Python que você especificou para a instrução python. Portanto, /usr/bin/python3.7 -m pip significa que você executa o pip para o interpretador localizado em /usr/bin/python3.7 . Você pode ler a documentação sobre o sinalizador -m se não souber como ele funciona (a propósito, é extremamente útil).

Por que usar python -m pip em vez de pip / pip3?


Você pode dizer: "Ok, mas por que não posso usar o pip executando o comando pip ?" A resposta é: "Sim, mas você terá menos controle sobre ele". Vou explicar o que “controlar menos” significa com um exemplo.

Suponha que eu tenha duas versões do Python instaladas, por exemplo, Python 3.7 e 3.8 (isso é muito comum entre as pessoas que trabalham no Mac OS ou Linux, sem mencionar o fato de que você provavelmente desejava jogar com o Python 3.8 e já tinha Python 3.7). Então, se você digitar pip no terminal, para qual interpretador Python você instalará o pacote?

Sem informações mais detalhadas, você não saberá a resposta. Primeiro, você precisará entender o que está no PATH, ou seja, /usr/bin será o primeiro ou /usr/local/bin (que são os locais mais comuns para instalar o Python, da maneira como geralmente /usr/local/ é o primeiro). Então, você se lembra de onde instalou o Python 3.7 e 3.8 e que eram diretórios diferentes, e saberá o que veio primeiro no PATH. Suponha que você tenha instalado os dois manualmente, talvez o Python 3.7.3 já tenha sido pré-instalado no seu sistema e você tenha instalado o Python 3.7.5. Nesse caso, as duas versões do Python são instaladas em /usr/local/bin . Você pode me dizer agora a que pip está agora anexado?

Você não sabe a resposta. Se você não souber quando cada versão foi instalada e entender que a versão mais recente do pip foi gravada em /usr/local/bin/pip , mas não sabe qual interpretador será usado para o comando pip . Agora você pode dizer: "Eu sempre instalo as versões mais recentes, o que significa que o Python 3.8.0 será instalado por último, porque é mais novo que, digamos, o 3.7.5." Ok, mas o que acontece quando o Python 3.7 é lançado .6? Seu pip não seria mais usado no Python 3.8, mas no Python 3.7.

Quando você usa python -m pip com o interpretador python específico necessário, toda a ambiguidade desaparece. Se eu escrever o pip python3.8 -m , sei exatamente qual pip será usado e que o pacote será instalado para o Python 3.8 (o mesmo aconteceria se eu apontasse o python3.7).

Se você usa o Windows, tem um incentivo adicional para usar o python -m pip , pois ele permite que o pip se atualize. Principalmente porque o pip.exe é considerado em execução quando você escreve o pip install --upgrade pip . Neste ponto, o Windows não permitirá que você reinstale o pip.exe . No entanto, se você instalar o python-m pip install --upgrade pip , contornar esse problema quando o python.exe for iniciado, não o pip.exe .

E o que acontece quando estou em um ambiente ativado?


Geralmente, quando explico a essência deste artigo para as pessoas, sempre há alguém que diz: "Eu sempre uso o ambiente virtual, e isso não se aplica a mim". Bem, para iniciantes, sempre seria bom usar um ambiente virtual! (Vou explicar por que penso assim em um dos meus próximos artigos!) Mas, para ser sincero, ainda insistiria em usar python -m pip , mesmo que, estritamente falando, isso não seja necessário.

Primeiro, se você usa o Windows, ainda deseja usar o python-m pip para poder atualizar o pip em seu ambiente.

Em segundo lugar, mesmo se você usar um sistema operacional diferente, eu diria que ainda precisa usar o python-m pip , pois ele funcionará independentemente da situação. Ele o alertará sobre um erro se você esquecer de ativar o ambiente, e qualquer pessoa que assistir a você adotará as melhores práticas. E, pessoalmente, não acho que salvar 10 pressionamentos de tecla seja um preço significativo por não usar boas práticas. E esse comando também ajudará a evitar erros ao escrever scripts de automação que executarão operações obviamente incorretas se você esquecer de ativar o ambiente.

Pessoalmente, quando uso qualquer ferramenta cujo trabalho dependa do intérprete iniciado, sempre uso -m , independentemente de o ambiente virtual estar ativado ou não. É sempre importante entender qual intérprete de Python estou usando.

SEMPRE use o meio ambiente! Não coloque tudo em ordem no intérprete global!


Quando falamos sobre como evitar confusão ao instalar no Python, quero enfatizar que não devemos instalar nada no interpretador global do Python quando trabalhamos localmente (os contêineres são uma questão completamente diferente)! Se este é o Python pré-instalado do seu sistema, se você instalar alguma versão incompatível da biblioteca em que o seu sistema operacional se baseia, você realmente quebrará o sistema.

Mas, mesmo que você instale uma cópia do python separadamente, recomendo fortemente que não seja instalado diretamente no desenvolvimento local. Por fim, você usará vários pacotes em seus projetos que podem entrar em conflito entre si e não terá uma idéia clara das dependências em seus projetos. É muito melhor usar ambientes para isolar projetos e ferramentas individuais um do outro. A comunidade Python usa dois tipos de ambientes: ambientes virtuais e ambientes conda. Existe até uma maneira especial de instalar ferramentas Python isoladamente.

Se você precisar instalar uma ferramenta


Para uma instalação independente da ferramenta, posso recomendar o uso do pipx . Cada ferramenta receberá seu próprio ambiente virtual, para não entrar em conflito com outras pessoas. Portanto, se você quiser ter apenas uma instalação, por exemplo, Black , poderá trabalhar sem interromper acidentalmente sua única instalação do mypy .

Se você precisar de um ambiente de projeto (e não usar conda)


Quando você precisa criar um ambiente para um projeto, eu sempre recorro a ambientes virtuais e venv . Ele está incluído no stdlib Python, por isso está sempre disponível usando python-m venv (a menos que você esteja usando o Debian ou Ubuntu; nesse caso, você pode precisar instalar o pacote python3-venv apt ). Um pouco da história: na verdade, excluí o antigo comando pyvenv que o Python instalou para criar ambientes virtuais usando venv , pelas mesmas razões pelas quais você precisa usar python -m pip em vez de pip . Ou seja, não está claro para qual intérprete você criou o ambiente virtual usando o antigo comando pyvenv . E lembre-se de que você não precisa ativar o ambiente para usar o intérprete contido nele, porque .venv/bin/python funciona bem como ativar o ambiente e inserir o comando python .

Hoje, alguns desenvolvedores ainda preferem o virtualenv , pois está disponível no Python 2 e possui alguns recursos adicionais. Pessoalmente, tenho pouco interesse em recursos adicionais, e ter o venv integrado significa que não preciso usar o pipx para instalar o virtualenv em todas as máquinas. Mas se o venv não se adequa às suas necessidades e você deseja um ambiente virtual, veja se o virtualenv oferece o que você precisa.

Se você usar conda


Se você usar conda , poderá usar ambientes conda para obter o mesmo efeito que os ambientes virtuais fornecidos pelo venv podem oferecer. Não vou abordar se você precisa usar conda ou venv em sua situação específica, mas se você usa conda , sabe que pode (e deve) criar ambientes conda para o seu trabalho, em vez de instalar tudo por conta própria instalação do sistema. Portanto, você pode entender claramente quais dependências seu projeto possui (e esse é um bom motivo para usar miniconda em vez de anaconda cheia, pois o primeiro é menor que um décimo do volume do último).

Sempre existem contêineres


Trabalhar em um contêiner é uma maneira de não lidar com o meio ambiente, pois toda a sua "máquina" se tornará um ambiente separado. Até você instalar o Python no sistema de contêiner, você poderá fazer com segurança uma instalação global para que seu contêiner permaneça simples e direto.

Repito que você realmente entende a essência ...
Não instale nada no seu interpretador global do Python! Sempre tente usar o ambiente para o desenvolvimento local!

Não posso mais dizer quantas vezes eu tive que ajudar alguém que pensava que o pip estava instalado em um intérprete Python, mas realmente instalado em outro. E essa quantia imensurável também se aplica àqueles momentos em que as pessoas quebram o sistema inteiro ou se perguntam por que não podem instalar algo que contradiz outra coisa que haviam definido anteriormente para outro projeto etc. devido ao fato de que eles não se preocuparam em configurar o ambiente em sua máquina local.

Portanto, para que você e eu possamos dormir em paz, use python-m pip e tente sempre usar o ambiente.

Source: https://habr.com/ru/post/pt475392/


All Articles