Usar pip3
para instalar um pacote em a virtualenv
faz com que o pacote seja instalado na pasta global site-packages em vez de na pasta virtualenv. Veja como configuro o Python3 e o virtualenv no OS X Mavericks (10.9.1):
Instalei o Python3 usando o Homebrew:
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
brew install python3 --with-brewed-openssl
Alterou a $PATH
variável em .bash_profile
; adicionou a seguinte linha:
export PATH=/usr/local/bin:$PATH
Execução de which python3
retornos /usr/local/bin/python3
(após reiniciar o shell).
Nota: which python3
ainda retorna / usr/bin/python
embora.
Instalado virtualenv
usando pip3
:
pip3 install virtualenv
Em seguida, crie um novo virtualenv
e ative-o:
virtualenv testpy3 -p python3
cd testpy3
source bin/activate
Observação: se eu não especificar -p python3, pip estará ausente da pasta bin no virtualenv.
Executando which pip
e which pip3
ambos retornam a pasta virtualenv:
/Users/kristof/VirtualEnvs/testpy3/bin/pip3
Agora, quando tento instalar, por exemplo, Markdown usando pip no virtualenv ativado, o pip irá instalar na pasta global site-packages em vez da pasta site-packages do virtualenv.
pip install markdown
pip list
Devoluções em execução :
Markdown (2.3.1)
pip (1.4.1)
setuptools (2.0.1)
virtualenv (1.11)
Conteúdo de /Users/kristof/VirtualEnvs/testpy3/lib/python3.3/site-packages
:
__pycache__/
_markerlib/
easy_install.py
pip/
pip-1.5.dist-info/
pkg_resources.py
setuptools/
setuptools-2.0.2.dist-info/
Conteúdo de /usr/local/lib/python3.3/site-packages
:
Markdown-2.3.1-py3.3.egg-info/
__pycache__/
easy-install.pth
markdown/
pip-1.4.1-py3.3.egg/
setuptools-2.0.1-py3.3.egg
setuptools.pth
virtualenv-1.11-py3.3.egg-info/
virtualenv.py
virtualenv_support/
Como você pode ver, a pasta global site-packages contém Markdown, a pasta virtualenv não.
Observação: eu já tinha Python2 e Python3 instalados antes em uma VM diferente (segui essas instruções) e tive o mesmo problema com Python3; Instalar pacotes em um virtualenv baseado em Python2 funcionou perfeitamente.
Quaisquer dicas, sugestões, ... seriam muito apreciadas.
fonte
pip3
?). Pode não ser ruim por si só, mas você deve estar ciente se for.Respostas:
Engraçado você ter tocado nisso, eu simplesmente tive exatamente o mesmo problema. Eu resolvi isso eventualmente, mas ainda não tenho certeza do que causou isso.
Tente verificar seus scripts
bin/pip
ebin/activate
. Embin/pip
, olhe para o shebang. Está correto? Se não, corrija. Então, na linha ~42
em seubin/activate
, verifique se o caminho do virtualenv está correto. Será algo assimSe estiver errado, corrija-o,
deactivate
então. bin/activate
, e se nosso problema mútuo tiver a mesma causa, deve funcionar. Se ainda não o fizer, você está no caminho certo, de qualquer maneira. Passei pela mesma rotina de resolução de problemas que você,which pip
repetidamente, seguindo o rastreamento da pilha, etc.Tenha certeza absoluta de que
é o que você quer, e não se referindo a outro projeto de teste com nome semelhante (eu tive esse problema e não tenho ideia de como ele começou. Minha suspeita é executar vários virtualenvs ao mesmo tempo).
Se nada disso funcionar, uma solução temporária pode ser, como disse Joe Holloway,
Talvez não seja o ideal, mas deve funcionar em uma pitada.
Link para minha pergunta original:
VirtualEnv / Pip tentando instalar pacotes globalmente
fonte
#!/usr/local/bin/python3.3
vez de#!/Users/kristof/VirtualEnvs/testpy3/bin/python3.3
. Eu mudei, ativei o virtualenv e instalei o pacote Markdown. Pip agora é instalado na pasta virtualenv site-packages em vez da global.activate
script estava bom, mas cuidado , todos ospip*
scripts eeasy_install*
scripts têm o conteúdo errado. Todos eles devem ser corrigidos manualmente. Não consegui consertá-los reinstalando o pip ou algo parecido. Além disso, um esclarecimento para a solução alternativa de Joe Holloway: o problema não é com o shell procurando por pip, é o fato de que pip especifica explicitamente o python errado . Portanto, você mesmo precisaria especificar o python, da seguinte forma:$ ~/.virtualenvs/venv/bin/python ~/.virtualenvs/venv/bin/pip --version
--relocatable
meu env, e a linha 42 está errada, parece que o--relocatable
trabalho não funcionou direito.Para mim, isso não era um problema de pip ou virtualenv. Era um problema de python. Eu tinha definido meu $ PYTHONPATH manualmente em ~ / .bash_profile (ou ~ / .bashrc) depois de seguir alguns tutoriais online. Este $ PYTHONPATH definido manualmente estava disponível no virtualenv, pois provavelmente deveria ser permitido.
Além disso,
add2virtualenv
não estava adicionando o caminho do meu projeto ao meu $ PYTHONPATH por algum motivo no virtualenv.Apenas alguns caminhos bifurcados para aqueles que ainda podem estar presos! Felicidades!
fonte
Eu tive o mesmo problema, resolvi removendo o diretório venv e recriá-lo!
Agora tudo funciona como um encanto.
fonte
pip3
enquanto o virtualenv, por padrão, usava python2, portanto, usando empip
vez depip3
. Eu verifiquei obin
para encontrar nãopip3
. Usarvirtualenv -p python3 venv
resolveu o problema.Eu tive esse problema também. Chamar
pip install <package_name>
do/bin
diretório em meu ambiente virtual Python 3.3 em meu Mavericks Mac fez com que o pacote Python fosse instalado no diretório de pacotes de sites globais Python 2.7. Isso apesar do fato de que meu $ PATH começou com o diretório que contémpip
. Esquisito. Isso não acontece no CentOS. Para mim, a solução era ligar empip3
vez depip
. Quando eu tinha instalado pip dentro do ambiente virtual via ez_setup , três executáveis "pip" tinha sido instalado no/bin
diretório -pip
,pip3
epip3.3
. Curiosamente, todos os três arquivos eram exatamente iguais. Chamandopip3 install <package_name>
fez com que o pacote Python fosse instalado corretamente no diretório local de pacotes de sites. Chamarpip
com o nome do caminho completo no ambiente virtual também funcionou corretamente. Eu estaria interessado em saber por que meu Mac não está usando $ PATH da maneira que eu esperava.fonte
A primeira coisa a verificar é para qual local o pip está resolvendo:
se você estiver em um virtualenv, esperaria que isso lhe desse algo como:
No entanto, pode ser que ele esteja resolvendo o pip do sistema por algum motivo. Por exemplo, você pode ver isso de dentro do seu virtualenv (isso é ruim):
Para resolver isso, verifique seu pipconfig em:
e certifique-se de que não há nada que esteja coagindo seu caminho Python ou seu caminho pip (isso corrigiu para mim).
Em seguida, tente iniciar um novo terminal e reconstruir seu virtualenv (exclua e crie-o novamente)
fonte
/etc/pip.conf
! Eu tive um problema semelhante e depois de muita depuração, descobri que alguém configurou incorretamente o sistema em que eu estava trabalhando, mexendo com este arquivo.which pip
ainda estava me fornecendo o caminho correto!Eu tive o mesmo problema ao instalar um pacote python de dentro de um virtualenv. A causa raiz no meu caso era diferente. De dentro do virtualenv, eu estava (por hábito no Ubuntu), fazendo:
Isso fez com que o bin / pip shebang fosse ignorado e usou o python não virtualenv do root para instalá-lo nos pacotes de sites globais. Como temos um ambiente virtual, devemos instalar o pacote sem "sudo"
fonte
Eu tropecei no mesmo problema ao executar Manjaro. Criei o ambiente virtual usando
python3 -m ven venv
e depois ativei usandosource venv/bin/actiave
.which python
ewhich pip
ambos apontavam para os binários corretos no virtualenv, porém não consegui instalar no virtualenv, mesmo usando o caminho completo dos binários. Descobri que quando desinstalei o pacote python-pip comsudo pacman -R python-pip python-reportlab
(tive que incluir o reportlab para satisfazer as dependências) tudo começou a funcionar conforme o esperado. Não sei por que, mas provavelmente isso se deve a uma instalação dupla em que o pacote do sistema está tendo precedência.fonte
python-pip
via pamac e o pip virtualenv continuou a funcionar corretamente. Não sei exatamente o que está acontecendo, mas concordo com sua avaliação de um problema de instalação dupla.Tive um problema semelhante após atualizar para
pip==8.0.0
. Tive que recorrer a depuração de pip para rastrear o caminho ruim.Acontece que meu diretório de perfil tinha um arquivo de configuração distutils com alguns valores de caminho vazios. Isso fazia com que todos os pacotes fossem instalados no mesmo diretório raiz em vez do ambiente virtual apropriado (no meu caso
/lib/site-packages
).Não tenho certeza de como o arquivo de configuração chegou lá ou como ele tinha valores vazios, mas começou após a atualização do pip.
No caso de alguém se deparar com o mesmo problema, simplesmente excluir o arquivo
~/.pydistutils.cfg
(ou remover o caminho de configuração vazio) corrigiu o problema em meu ambiente porque o pip voltou para a configuração padrão distribuída.fonte
[install]\nprefix=
Vá para o diretório bin em seu ambiente virtual e escreva assim:
fonte
Eu tive o mesmo problema em macos com python 2 e 3 instalado.
Além disso, eu tinha aliases para apontar para python3 e pip3 no meu
.bash_profile
.Remover aliases e recriar ambientes virtuais
python3 -m venv venv
corrigiu o problema.fonte
Encontrei o mesmo problema hoje. Simplesmente reinstalei o pip globalmente com
sudo easy_install pip
(OSX / Max) e criei meu virtualenv novamente comsudo virtualenv nameOfVEnv
. Depois de ativar o novo virtualenv, opip
comando funcionou conforme o esperado.Acho que não usei
sudo
na primeira criação do virtualenv e pode ter sido esse o motivo de não ter acesso apip
de dentro do virtualenv, mas consegui acessarpip2
antes dessa correção, o que era estranho.fonte
virtualenv
ser executado novamenteAqui estão algumas práticas que podem evitar dores de cabeça ao usar ambientes virtuais:
Para uma melhor representação dessas práticas, aqui está uma simulação:
criando uma pasta para seus projetos / ambientes
criando ambiente
ambiente de ativação
instalando pacotes
pacote disponível dentro do ambiente
desativar ambiente
pacote NÃO DISPONÍVEL fora do ambiente
Notas:
Por que não sudo?
Se você renomear a pasta do seu projeto (conforme mencionado na resposta aceita) ...
fonte
Eu tive esse problema. Acontece que havia um espaço em um dos nomes de minha pasta que causou o problema. Eu removi o espaço, apaguei e reinstanciai usando venv, e tudo estava bem.
fonte
Esse problema ocorre ao criar uma instância virtualenv e, em seguida, alterar o nome da pasta pai.
fonte
Nenhuma das soluções acima funcionou para mim.
Meu venv estava ativo.
pip -V
ewhich pip
me deu o caminho virtualenv correto, mas quando fizpip install
pacotes com o venv ativado, meupip freeze
permaneceu vazio.Todas as variáveis de ambiente também estavam corretas.
Por fim, acabei de alterar o pip e remover o virtualenv:
Reinstale venv:
Criar venv:
E todos os pacotes instalados corretamente no meu venv novamente.
fonte
Depois de criar o ambiente virtual, tente usar o pip localizado em yourVirtualEnvName \ Scripts
Deve instalar um pacote dentro de Lib \ site-packages em seu ambiente virtual
fonte
Eu tive esse problema também. Chamar
sudo pip install
fez com que os pacotes Python fossem instalados no diretório global de pacotes de sites e chamarpip install
funcionou bem. Portanto, não use sudo no virtualenv.fonte
sudo su
seguido por<venv>/bin/activate
seguido porpip install
.O mesmo problema. Python3.5 e pip 8.0.2 instalados a partir do Linux
rpm
.Não encontrei uma causa primária e não consigo dar uma resposta adequada. Parece que existem várias causas possíveis.
No entanto, espero poder ajudar compartilhando minha observação e uma solução alternativa.
pyvenv
com--system-site-packages
./bin
não contémpip
,pip
está disponível nos pacotes do site do sistemapyvenv
sem--system-site-packages
pip
é instalado./bin
, mas é uma versão diferente (deensurepip
)Solução óbvia para
pyvenv
com--system-site-packages
:--system-site-packages
opçãoinclude-system-site-packages = false
paratrue
nopyvenv.cfg
arquivofonte
Também vale a pena verificar se você não modificou de alguma forma o caminho para seu virtualenv.
Nesse caso, a primeira linha
bin/pip
(e o resto dos executáveis) teria um caminho incorreto.Você pode editar esses arquivos e corrigir o caminho ou remover e instalar novamente o virtualenv.
fonte
Para Python 3ers
Tente atualizar. Eu tive exatamente o mesmo problema e tentei a resposta de Chases, porém sem sucesso. A maneira mais rápida de refatorar isso é atualizar sua versão Python Minor / Patch, se possível. Percebi que estava executando o 3.5.1 e atualizei para o 3.5.2. Pyvenv mais uma vez funciona.
fonte
Isso aconteceu comigo quando criei o virtualenv no local errado. Então pensei que poderia mover o dir para outro local sem que isso importasse. Isso importava.
Que merda, esqueci de fazer o cd
projects
antes de criar o virtualenv e clonar o representante. Bem, sou muito preguiçoso para destruir e recriar. Vou apenas mover o dir sem problemas.Não, quer mais permissões, quais são? Achei estranho, mas SUDO LONGE! Em seguida, instalou os pacotes em um local global.
A lição que aprendi foi, apenas excluir o diretório virtualenv. Não se mexa.
fonte
Tive este problema depois de instalar o Divio: ele tinha alterado meu PATH ou ambiente de alguma forma, já que inicia um terminal.
A solução neste caso foi apenas fazer o
source ~/.bash_profile
que já deveria estar configurado para voltar ao estado original pyenv / pyenv-virtualenv.fonte
Aconteceu comigo quando instalei o virtualenv com
--python=python3.6
flag, mas depois tentei usarpip2 install
.Criar virtualenv com o sinalizador da versão que você usará resolve os problemas de permissão. Para verificar, experimente
which pip
ouwhich pip2
ouwhich pip3
(depende da sua escolha). Se algum quepip
você usar mostra o caminho não paravenv
aqui, é o seu problema.fonte
De alguma forma, um arquivo setup.cfg com um prefixo = "" na pasta do projeto
executar pip install no virtualenv fora da pasta do projeto funcionou, então, por dentro, dizia a pip para usar um prefixo vazio cujo padrão é "/"
remover o arquivo corrigiu isso
fonte
Tive esse problema e, depois de tentar todas as soluções acima, apenas removi tudo e comecei de novo.
No meu caso usei
sudo
na criação de uma das pastas em que existia o ambiente virtual, e sudo deu privilégios para rootFiquei muito chateado! Mas funcionou!
fonte
Eu tenho que usar 'sudo' para instalar pacotes através do pip no meu sistema ubuntu por algum motivo. Isso está fazendo com que os pacotes sejam instalados em pacotes de sites globais. Colocando aqui para qualquer pessoa que possa enfrentar esse problema no futuro.
fonte
Tive exatamente o problema do título e resolvi. Pip começou a instalar no venv site-packages depois que limpei meu PATH: ele tinha um caminho para meu diretório ~ / bin local no início.
Portanto, meu conselho: verifique minuciosamente as variáveis de ambiente para "lixo" ou qualquer coisa fora do padrão. Infelizmente, o virtualenv pode ser sensível a eles.
Boa sorte!
fonte
A resposta curta é executar Command virtualenv com o parâmetro “—no-site-packages”.
Resposta longa com explicação: -
Então, depois de correr aqui e ali, e passar por muitos tópicos, descobri o problema. As respostas acima deram a ideia, mas gostaria de repassar tudo.
O problema é que mesmo se você estiver ativando o ambiente, ele está se referindo ao ambiente do sistema por causa da forma como criamos o virtualenv.
quando executamos o comando virtualenv env -p python3, ele instala o virtualenv, mas não cria no-global — site-packages.txt.
Por causa disso, quando você ativa o ambiente pelo comando de ativação da fonte, há este arquivo chamado site.py (o nome pode ser diferente, eu apenas esqueci) que é executado e verifica se este arquivo não está presente, não adicionará seu caminho env a sys.path e usar sistemas python.
para corrigir esse problema, basta executar o virtualenv com o parâmetro extra —no-site-packages, ele criará esse arquivo e quando você ativar o ambiente, ele adicionará seu caminho de ambiente personalizado em sua variável PATH tornando-o acessível.
fonte
Muita discussão boa acima, mas exemplos de virtualenv foram usados. Como 'conda' agora é a ferramenta recomendada para gerenciar o virtualenv, resumi as etapas para executar o pip no conda env a seguir.
Usarei py36r como o nome do env e / opt / conda / envs é o prefixo do envs):
Observe que o pip executado deve estar em
/opt/conda/envs/py36r/bin/pip
(não/opt/conda/bin/pip
).Alternativamente, você pode simplesmente executar o seguinte sem ativar o conda
Além disso, se você instalar usando conda, poderá instalar sem ativar:
fonte
JANELAS
Para mim a solução não foi usar
mkvirtualenv
, mas:python -m venv path/to/your/virtualenv
workon funciona corretamente.
while in virtualenv:
pip -V
mostra o caminho do virtualenv para pipfonte