O 'sudo pip install' ainda é uma prática quebrada?

17

Sou novo no Ubuntu, então, por favor, tenha paciência comigo. Eu instalei pip usando este comando: sudo apt-get -y install python-pip . Então eu instalei o NLTK usando o comando em seu website, que era: sudo pip install -U nltk . Mas então eu tropecei em esta questão que diz que tudo que eu fiz foi uma "prática quebrada". A linha que mais me impressionou foi que usando sudo pip é inerentemente errado e que dar força pip demais poderia danificar arquivos do sistema operacional. Alguém pode validar essa afirmação?

Nota - Eu usei apenas sudo porque quando eu tentei o comando apt-get -y install python-pip ele me deu 2 erros:

E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
    
por whatwhatwhat 25.07.2016 / 04:26

4 respostas

19

O sudo pip install e sua outra variante comum sudo -H pip install devem ser não incentivados, pois é um risco de segurança usar privilégios de root para usar pip para instalar pacotes Python do PyPI (Python Package Índice).

De link (grifo meu):

  

Quando você executa pip com sudo , você executa setup.py com sudo . Dentro   Em outras palavras, você executa código Python arbitrário da Internet como root.    Se alguém colocar um projeto malicioso no PyPI e você instalá-lo, você    permite que um atacante tenha acesso root ao seu computador. Antes de alguns recentes   correções para pip e PyPI, um atacante também poderia executar um homem no   ataque do meio para injetar seu código quando você baixar um confiável   projeto.

Conforme mencionado no link , é importante observar que qualquer pessoa pode fazer o upload Pacotes Python, incluindo os maliciosos, para o PyPI.

Em resumo, de acordo com o princípio do menor privilégio , não use sudo com pip para instalar pacotes Python do PyPI, a menos que seja absolutamente necessário. Em vez disso, considere usar pip install --user (observe que pip install sem sudo nem sinalizadores / opções adicionais padrão para pip install --user no Ubuntu atualmente) ou ambientes virtuais (como virtualenv ). Se você vir pessoas recomendando sudo pip ou sudo -H pip , informe-as para não.

    
por edwinksl 25.07.2016 / 08:49
8

Você deve usar sudo para instalar o pip com apt ( sudo apt install python-pip ), mas como indicado em resposta de edwinksl você não deve usar sudo para instalar pacotes com pip , você deve usar pip install --user <package> para instalar somente para seu usuário ou use um virtualenv para restringir ainda mais o escopo do pacote.

O Apt instala pacotes dos repositórios do Ubuntu, enquanto o pip instala os pacotes enviados pelo usuário do PyPi, que podem ser maliciosos.

    
por pizzapants184 14.01.2017 / 07:37
3

E para uma resposta mais moderada:

  1. Você realmente precisa sempre de sudo apt-get install ... , é exatamente como a ferramenta foi projetada para funcionar.
  2. Usar sudo [-H] com pip install é possível & amp; opcional, dependendo do que exatamente você quer fazer (e, portanto, "controvérsia").

Um dos os lema de Python é "Deve haver ser um - e de preferência apenas um - caminho óbvio para fazê-lo. " E como a maioria dos lemas, é quebrado com alegria sardônica aparentemente em todas as oportunidades possíveis. (É por isso que os lemas existem, eu acho). Infelizmente, na minha mais humilde opinião, o ecossistema Python consiste em muitas regras conflitantes "hard & amp; fast", nunca quebradas ... exceto quando "yada yada yada" (diabo, detalhes, etc). Em quase todos os casos, isso se deve à evolução histórica da linguagem & amp; ferramentas (e quem quer / precisa de uma aula de história quando quer apenas continuar com seu trabalho) - mas também pode ser devido a diferenças nas plataformas Mac / Win / * Nix (por exemplo, Unix / Linux tem uma mentalidade semelhante, mas tem a vantagem de décadas a mais de maturidade.) Então por favor faça todas essas "prática quebrada" & amp; "inerentemente errados" carga-cultistas com uma enorme pitada de sal. Alguns realmente significam bem. (Outros são apenas, bem, significa.)

Antes de mais nada, em vez de "instalações por usuário" básicas, você quase sempre preferirá um virtualenv, porque, na verdade, é provavelmente o que você vai precisar. Então você pode começar com isso agora. Como isso é feito, exatamente, "depende" (veja o lema do Python, acima). Se você estiver usando o Conda (principalmente para Mac e Windows), ele será configurado usando o Conda . Se estiver usando Python "puro" [sic] , depende de qual versão & amp; quais utilitários python você tem, mas virtualenvwrapper é muito útil.

Segundo, apenas como um contra-exemplo da regra "never sudo", você pode preferir sudo -H pip install -U numpy , que é perfeitamente bom, até mesmo vantajoso, pois pode evitar o download / reinstalação / manutenção de grandes bibliotecas. , onde você só quer / precisa de uma versão, em cada virtualenv separadamente. Estruturas grandes e populares, como scikit-learn, NumPy, matplotlib, SciPy, pandas, etc., podem ser instaladas uma vez & amp; feito e reutilizado em ambientes . Além disso, o seu sistema amigável local pode ser instalado em todos os usuários em um sistema - e obviamente eles também estão fazendo isso via sudo , por exemplo, para mais instalações complicadas, como o TensorFlow.

E, por fim, se você estiver instalando uma biblioteca aleatória de terceiros que faça isso (Twitter API, texto em texto, formatação de código, etc), então concordo totalmente - não o instale como root via sudo. Claro, instale-o como seu usuário atual. Mas lembre-se, sua conta usuário tem todas as suas coisas realmente importantes .

    
por michael 18.09.2017 / 03:41
-1

Não, isso está correto. Não posso validar essa reivindicação. Eu sempre uso sudo -H com pip . pip só pode danificar arquivos do sistema operacional em até apt . Só não use sudo com pip quando quiser instalar apenas para esse usuário.

    
por ubashu 25.07.2016 / 04:34