Comecei a usar meu Mac para instalar pacotes Python da mesma forma que faço com meu PC com Windows no trabalho; no entanto, no meu Mac eu encontrei erros frequentes de permissão negada ao gravar em arquivos de log ou pacotes de sites.
Portanto, pensei em executar pip install <package>
em, sudo
mas isso é um uso seguro / aceitável do sudo, considerando que estou apenas querendo que ele 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'
Atualizar
Isso provavelmente se deve às permissões, mas a melhor abordagem é usar ambientes virtuais para seus projetos Python. A corrida sudo pip
deve ser evitada, a menos que seja absolutamente necessário.
cd /tmp; sudo pip install foo
' é uma solução alternativa adequada.Respostas:
Use um ambiente virtual :
Você só usa
sudo
ou permissões elevadas quando deseja instalar coisas para a instalação global do Python em todo o sistema.É melhor usar um ambiente virtual que isole os pacotes para você. Dessa forma, você pode brincar sem poluir a instalação global do python.
Como bônus, o virtualenv não precisa de permissões elevadas.
fonte
sudo pip install
. Digamos que eu precise instalar algum pacote que irei usar em muitos projetos ou no nível do sistema. Como alguma ferramenta CLI comopgcli
. Obviamente, não preciso de um ambiente virtual para isso, quero instalá-lo globalmente. Devo usarsudo pip install
ou existem algumas práticas mais corretas? Essa é a questão.Não é seguro e está sendo mal visto - veja Quais são os riscos de executar o 'sudo pip'? Para instalar o pacote Python em seu diretório inicial, você não precisa de privilégios de root. Veja a descrição da
--user
opção de pip.fonte
sudo pip install
não sabia dos danos de usá-lo. Como posso desfazer este comando ou bloquear a execuçãosudo
?Seu problema original é que o pip não pode gravar os logs na pasta.
Você precisa cd em uma pasta na qual o processo invocado pode escrever como
/tmp
para que umcd /tmp
e re invocar o comando, provavelmente trabalho, mas não é o que você quer.MAS, na verdade, para este caso específico (você não quer usar
sudo
para instalar pacotes Python) e não há necessidade de instalações de pacotes globais, você pode usar o--user
sinalizador como este:e vai funcionar muito bem.
Presumo que você tenha uma instalação de python python de um usuário e não quer se preocupar em ler sobre o virtualenv (que não é muito amigável) ou pipenv .
Como algumas pessoas na seção de comentários apontaram, a próxima abordagem não é uma ideia muito boa, a menos que você não saiba o que fazer e tenha travado:
Outra abordagem para pacotes globais como no seu caso, você deseja fazer algo como:
ou mais geralmente
fonte
--user
opção de pip foi dada como uma solução na minha resposta que já existia quando você escreveu a sua.--user
me ajuda!site-packages
diretório do sistema Python é semelhante a "consertar" uma bomba batendo nela com uma chave inglesa. É protegido por uma razão - você não deve instalar nada lá . A solução real não é misturar a distribuição do sistema Python com a programação do dia-a-dia. Instale uma distribuição Python diferente (de Python.org, Homebrew, Canopy, etc.).Como tive o mesmo problema, quero enfatizar que, na verdade, o primeiro comentário de Brian Cain é a solução para o "IOError: [Errno 13]" - problema:
Se executado no diretório temporário (
cd /tmp
), o IOError não ocorre mais se eu executarsudo pip install foo
.fonte
sudo pip
com esta "solução" e, portanto, instalando pacotes com privilégios de root, o que provavelmente não é o que você deseja?/tmp
, funciona, porque todos têm acesso de gravação lá.Tive um problema ao instalar
virtualenvwrapper
após instalar com sucessovirtualenv
.Meu terminal reclamou depois que fiz isso:
Então, eu tentei sem sucesso
(NÃO RECOMENDADO):Então, eu instalei com sucesso com este:
fonte
Parece que suas permissões estão confusas. Digite
chown -R markwalker ~
no Terminal e tentepip
novamente? Deixe-me saber se você está classificado.fonte
chown
está fornecendoOperation not permitted
vários diretórios ocultos como.shsh
& presumo que esteja trabalhando com arquivos que pode definir agora, mas verei o que acontece quando o prompt cli retornar.