ti-enxame.com

É aceitável e seguro executar o pip sob o sudo?

Eu comecei a usar meu Mac para instalar pacotes Pythonda mesma maneira que faço com meu PC com Windows no trabalho; no entanto, no meu Mac, eu me deparei com erros frequentes de permissão negada ao gravar arquivos de log ou pacotes de sites.

Por isso, pensei em executar pip install <package> em Sudo, mas isso é um uso seguro/aceitável de Sudo, considerando que estou apenas querendo que isso seja instalado na minha conta de usuário atual?

Exemplo de traceback de um erro de E/S do arquivo de log:

Command /usr/bin/python -c "import setuptools;__file__='/Users/markwalker/build/pycrypto/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /var/folders/tq/hy1fz_4j27v6rstzzw4vymnr0000gp/T/pip-k6f2FU-record/install-record.txt failed with error code 1 in /Users/markwalker/build/pycrypto
Storing complete log in /Users/markwalker/Library/Logs/pip.log
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 8, in <module>
    load_entry_point('pip==1.1', 'console_scripts', 'pip')()
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.Egg/pip/__init__.py", line 116, in main
    return command.main(args[1:], options)
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.Egg/pip/basecommand.py", line 141, in main
    log_fp = open_logfile(log_fn, 'w')
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.Egg/pip/basecommand.py", line 168, in open_logfile
    log_fp = open(filename, mode)
IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

pdate Isso provavelmente estava abaixo das permissões, no entanto, a melhor abordagem é usar ambientes virtuais para seus projetos python. A execução de Sudo pip deve ser evitada, a menos que seja absolutamente necessário.

99
markwalker_

Use um ambiente virtual :

$ virtualenv myenv
.. some output ..
$ source myenv/bin/activate
(myenv) $ pip install what-i-want

Você usa somente Sudo ou permissões elevadas quando deseja instalar coisas para a instalação global, em todo o sistema Python.

É melhor usar um ambiente virtual que isole pacotes para você. Dessa forma, você pode brincar sem poluir a instalação global python.

Como bônus, o virtualenv não precisa de permissões elevadas.

97
Burhan Khalid

É aceitável e seguro executar pip install em Sudo?

Não é seguro e está sendo desaprovado - veja Quais são os riscos de executar o 'Sudo pip'? Para instalar o pacote Python em seu diretório home você não precisa de privilégios de root. Veja descrição da opção --user para pip.

39
Piotr Dobrogost

Seu problema original é que o pip não pode gravar os logs na pasta.

IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

Você precisa criar um cd em uma pasta na qual o processo invocado pode escrever como /tmp, então um cd /tmp e re invocar o comando provavelmente funcionará, mas não é o que você deseja.

MAS na verdade para este caso em particular (você não quer usar Sudo para instalar pacotes python) e não precisa de pacote global instala você pode usar o flag --user assim:

pip install --user <packagename>

e vai funcionar muito bem.

Eu suponho que você tem um usuário python python instalação e não quer se preocupar com a leitura sobre virtualenv (que não é muito userfriendly) ou pipenv .

Como algumas pessoas na seção de comentários apontaram, a próxima abordagem não é uma boa idéia, a menos que você não saiba o que fazer e tenha ficado preso:

Outra abordagem para pacotes globais como no seu caso você quer fazer algo como:

chown -R $USER /Library/Python/2.7/site-packages/

ou mais geralmente

chown -R $USER <path to your global pip packages>
24
throws_exceptions_at_you

Como tive o mesmo problema, quero enfatizar que, na verdade, o primeiro comentário de Brian Cain é a solução para o problema "IOError: [Errno 13]":

Se executado no diretório temp (cd /tmp), o IOError não ocorrerá mais se eu executar Sudo pip install foo.

9
Edgar

Parece que suas permissões estão confusas. Digite chown -R markwalker ~ no terminal e tente pip novamente? Deixe-me saber se você está classificado.

5
hd1

Eu tive um problema ao instalar o virtualenvwrapper após instalar com sucesso o virtualenv.

Meu terminal reclamou depois que fiz isso:

pip install virtualenvwrapper

Então, eu tentei sem sucesso (NÃO RECOMENDADO):

Sudo pip install virtualenvwrapper

Então, eu com sucesso instalei com isto:

pip install --user virtualenvwrapper
5
Mowzer