PIP não instalando no diretório virtualenv

10

Estou tentando instalar o django em um virtualenv que já existe.

Seguindo as instruções listadas no site de instalação do pip aqui , executei o seguinte no SSH.

name@server:~$ . myenv.env/bin/activate
(myenv.env)nam@server:~$ pip install django

No entanto, na parte inferior da instalação, estou vendo o seguinte:

creating /usr/local/lib/python2.7/dist-packages/django

error: could not create '/usr/local/lib/python2.7/dist-packages/django': Permission denied

Parece que está tentando instalá-lo no diretório global. Eu não tenho privilégios de sudo. Estou fazendo algo errado aqui?

Atualização: $ PATH = /var/django/myenv.env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Luke Sapan
fonte
Funciona corretamente para outros pacotes? Você tem o mesmo problema se usar easy_install?
Larsks
Mesmo problema com outros pacotes. E eu acredito que o easy_install requer sudo e seria instalado no diretório global.
26413 Luke Sapan
Não, a configuração de um virtualenv facilita a instalação e o pip. Você pode digitar which easy_installpara ver se está usando seu virtualenv ou o sistema.
Larsks
Na verdade, você tem certeza de que está executando o pip de dentro do virtualenv? O que which pipproduz? E você vê por pipdentro myenv.env/bin/?
Larsks
Eu vejo pip dentro de myenv.env / bin /. Eu apenas tentei "ativar" meu ambiente novamente, e apesar de estar nesse modo ", qual pip" e "qual easy_install" retornam "usr / local / bin / pip" e "usr / bin / easy_install", respectivamente.
26513 Luke Sapan

Respostas:

6

Desculpe por um ano de resposta tardia! Eu tive o mesmo problema e o corrigi. Não sei se você alterou o nome de um diretório após criar o ambiente virtual. Se sim, então aqui está o que eu fiz.

1.) deactivateseu v-env. Após a correção, é necessário reiniciar o v-env, assim como deactivateagora. direita?

2.) Agora, desde que criamos o v-env em um caminho diferente, precisamos alterar as variáveis ​​do caminho estático nesses arquivos.

Para que o pip funcione, você não precisa fazer isso, mas eu ainda faço. bin/activate, bin/activate.csh, bin/activate.fish

bin/pip, bin/pip2, bin/pip2.7

bin/easy_install, bin/easy_install2.7

3.) Para que o pip funcione, você deve corrigir o interpretador python no arquivo pip, que também possui um local estático de intérprete definido por virtualenv no processo de criação.

4.) Para que o easy_install funcione? Você adivinhou, conserte a localização do intérprete.

Espero que isso tenha ajudado qualquer pessoa que esteja lendo isso no futuro. Desculpe OP, por estar atrasado.

Crocantes
fonte
Sim, foi exatamente isso. No meu caso, fui capaz de recriar o virtualenv do zero e isso foi resolvido.
Luke Sapan
Fico feliz em ajudar
Crispy
Estou tão feliz por finalmente encontrar uma resposta. Para mim, o uso do sed na pasta venv facilitou muito o trabalho. Algo como grep -rli '/path/to/old/env/bin' * | xargs -i@ sed -i 's/\/path\/to\/old\/env\/bin/\/path\/to\/new\/env\/bin/g' @. fonte
Keith
Você diz: "Para que o pip funcione, você deve corrigir o interpretador python no arquivo pip", onde e como isso é feito?
Dave
3

Eu tenho esse mesmo problema.

Excluí o ambiente virtual e criei um novo, que resolveu o problema.

Provavelmente não é a resposta que você estava esperando, mas já que é a única ...

Marca
fonte
1

Bem, sem privilégios administrativos, você é muito limitado no que é capaz de fazer. Se você não tem permissão para se elevar ou pedir privilégios, a melhor maneira que encontrei seria criar outro ambiente, criar um arquivo requirements.txt, baixar todos os pacotes necessários para sua máquina (django) que também deve estar localizado no seu arquivo de requisitos e deve funcionar.

secure212
fonte
0

Teve o mesmo problema. No meu caso, o motivo foi que o ambiente virtual criado era para python2.7 (o padrão), mas eu estava usando o pip3 para instalar um pacote. O pip3 não estava presente no meu virtualenv, por isso assumiu o padrão global. Para mim, a correção foi usar

virtualenv flask --python=python3

para criar o env.

Adversus
fonte
0

Eu encontrei o mesmo problema causado pela renomeação do usuário. A resposta de Crispy está totalmente certa. E minha solução pode ser mais conveniente.

setps:
1. Digite o caminho da lixeira do seu ambiente virtual, como cd ~/virenv_dir/bin
2. Renomeie todos os arquivos nesse diretório usando o comando sed.sed -i 's/old_name/new_name/' *

xialu
fonte
0

No meu caso, eu defini dois aliases (para superar outro problema na versão python padrão):

alias pip='/usr/bin/pip3'
alias python='/usr/bin/python3'

E isso estava causando os mesmos sintomas:

[Errno 13] Permission denied: '/usr/lib/python3.6/site-packages'

A remoção dos aliases resolveu o problema (antes ou depois da criação do virtualenv)

coderazzi
fonte
0

A chamada sudo pipchamará o pip global e não o pip no seu virtualenv. Ative / Trabalhe no seu ambiente e depois chame pip, não sudo pip, isso pode resolver o seu problema, como aconteceu com o meu.

Milton Walker
fonte