Eu 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 NLTK usando o comando em seu site, o que era: sudo pip install -U nltk
. Mas então eu tropecei nessa questão que diz que tudo o que fiz foi uma "prática interrompida". A linha que mais me impressionou foi que o uso sudo pip
é inerentemente errado e que dar pip
muita força pode danificar os arquivos do sistema operacional. Alguém pode validar esta reivindicação?
Nota - usei apenas sudo
porque, quando 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?
package-management
permissions
python
pip
o quê o quê o quê
fonte
fonte
sudo pip install
são inerentemente erradas. - de stackoverflow.com/a/33004920/95735sudo pip install
é tão ruim quantocurl "some-url" | sudo bash
instala. Da mesma forma, tivemos algumas vezes em que algum desenvolvedor costumavasudo pip install
instalar alguma dependência em sua estação de trabalho e depois fazia o check-in de código quebrado no repositório porque o arquivorequirements.txt
ousetup.py
estava faltando o que quer que eles instalassem, e todos os outros descobriram que dependência era necessária enquanto o cara estava de férias.Respostas:
Ambos
sudo pip install
e sua outra variante comum nãosudo -H pip install
devem ser incentivados, pois é um risco de segurança usar privilégios de root para instalar pacotes Python a partir do PyPI (Índice de Pacotes Python).pip
De https://stackoverflow.com/a/21056000/486919 (ênfase minha):
Conforme mencionado em https://security.stackexchange.com/a/79327/8761 , é importante observar que qualquer pessoa pode fazer upload de pacotes Python, incluindo maliciosos, para o PyPI.
Em resumo, de acordo com o princípio do menor privilégio , não use
sudo
compip
para instalar pacotes Python a partir do PyPI, a menos que seja absolutamente necessário. Em vez disso, considere usarpip install --user
(observe que,pip install
sem nenhumsudo
sinalizador / opções adicionais padrãopip install --user
no Ubuntu atualmente) ou ambientes virtuais (comovirtualenv
). Se você vir pessoas recomendandosudo pip
ousudo -H pip
, por favor, diga-lhes para não.fonte
sudo pip install
pode desinstalar pacotes Python "antigos" instalados pelo sistema, o que pode dificultar a atualização ou desinstalação desses pacotes do sistema operacional.sudo pip uninstall
não ajuda aqui, porque remove o novo pacote, mas não restaura os arquivos do antigo. (Meu colega R. Zagar entra em mais detalhes em outra resposta.)Você deve usar
sudo
para instalar o pip com o apt (sudo apt install python-pip
), mas como indicado na resposta do edwinksl, você não devesudo
instalar os pacotes com o pip , devepip install --user <package>
instalar apenas para o usuário ou usar um virtualenv para restringir ainda mais o escopo do pacote .O Apt instala pacotes dos repositórios do Ubuntu, enquanto o pip instala pacotes enviados pelo usuário do PyPi, que podem ser maliciosos.
fonte
E para uma resposta mais temperada:
sudo apt-get install ...
, é assim que a ferramenta foi projetada para funcionar.sudo [-H]
compip install
é possível e opcional, dependendo exatamente do que você deseja fazer (e, portanto, "controvérsia").Um dos lemas de Python é "Deve haver um - e de preferência apenas um - modo óbvio de 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 opinião mais humilde, o ecossistema Python consiste em muitas regras "duras e rápidas" conflitantes , que nunca serão quebradas ... exceto quando "yada yada yada" (diabo, detalhes, etc). Em quase todos os casos, isso se deve à evolução histórica do idioma e das ferramentas (e quem quer / precisa de uma lição de história quando quer apenas continuar seu trabalho) - mas também pode ser devido a diferenças no Mac / Win / * Plataformas Nix (por exemplo, Unix / Linux tem uma mentalidade semelhante,tome todas essas "práticas desestruturadas" e cultistas de carga "inerentemente errados" com uma enorme pitada de sal. Alguns realmente significam bem. (Outros são apenas, bem, maus.)
Antes de tudo, em vez de "instalações por usuário" básicas, você quase sempre prefere 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] , isso depende de qual versão e quais utilitários python você possui, mas o virtualenvwrapper é bastante útil.
Segundo, apenas como um contra-exemplo da regra "nunca sudo", você pode preferir
sudo -H pip install -U numpy
, o que é perfeitamente bom e até vantajoso, pois permite evitar o download / reinstalação / manutenção de grandes bibliotecas, nas quais você só deseja / precisa de uma versão para cada virtualenv separadamente. Estruturas grandes e populares como scikit-learn, NumPy, matplotlib, SciPy, pandas etc. podem ser instaladas uma vez e concluídas e reutilizadas em ambientes . Além disso, seu administrador de sistema amigável local pode conseguir instalá-los para todos os usuários de um sistema - e obviamente eles osudo
farão via também, por exemplo, para instalações mais complicadas, como o TensorFlow.E, finalmente, se você estiver instalando alguma biblioteca aleatória de terceiros que faz isso e aquilo (API do Twitter, alteração de texto, formatação de código etc.), concordo totalmente - não a instale como root via sudo. Claro, instale-o como seu usuário atual. Mas lembre-se, sua conta de usuário tem todas as suas coisas realmente importantes .
fonte
malloc
onde você não precisa. O--user
sinalizador faz o que o OP estava pedindo e não requer permissões especiais. Você está minando seus pontos positivos sobre o virtualenv no processo ... nada de "cultista de carga" sobre nada disso.O uso de "sudo pip install" pode e substituirá o conteúdo python fornecido pelo fornecedor do seu sistema operacional. Quando isso acontece, qualquer pacote de fornecedor afetado por isso não passa um "rpm --verify" e seus pacotes parecem estar corrompidos.
Deseja usar as ferramentas de administração do sistema testadas pelo fornecedor do sistema operacional ou está tudo bem em usar componentes não testados que você baixou da Internet?
Quando, não se, um pacote mal-intencionado for carregado no PyPI ... as pessoas que usarem "sudo pip install" acabarão executando essa carga maliciosa com privilégios completos do sistema. Você quer isso? (#principleofleastprivilege)
Se for apenas seu laptop e você estiver apenas arriscando algumas fotos de gatos, o risco provavelmente será baixo ... mas se for um sistema multiusuário, o risco será agora multiplicado por N. Se você tiver dados no sistema que tem valor, ou disponibilidade ou confiabilidade do sistema têm valor, os riscos também aumentam.
Sinta-se à vontade para escolher sua própria aventura, mas obtenha o consentimento informado dos outros usuários que podem ser afetados por sua escolha. Eles podem não se sentir confortáveis com o mesmo nível de risco que você.
fonte
Para adicionar a essas respostas: Eu não sei sobre o Ubuntu, mas no Fedora eu posso usar o
sudo dnf install python3-numpy
formato para instalar MUITOS pacotes úteis para mim. Isso não tem a desvantagem de ser inseguro (o mantenedor de repositório de distros validou pacotes), mas também permite a instalação em todo o sistema. A única desvantagem é que as versões de repositório de distribuição podem estar um pouco atrasadas nos pacotes no PyPI.fonte
Não, isso está correto. Não consigo validar esta reivindicação. Eu sempre uso
sudo -H
compip
.pip
só pode danificar arquivos do sistema operacional, tanto quantoapt
. Só não usesudo
compip
quando você deseja instalar apenas para esse usuário.fonte
pip
sistema inteiro? Se você é um administrador de sistemas, talvez seja uma história diferente.