Fiquei com a impressão de que virtualenv --no-site-packages
criaria um ambiente Python completamente separado e isolado, mas não parece.
Por exemplo, eu tenho o python-django instalado globalmente, mas desejo criar um virtualenv com uma versão diferente do Django.
$ virtualenv --no-site-packages foo
New python executable in foo/bin/python
Installing setuptools............done.
$ pip -E foo install Django
Requirement already satisfied: Django in /usr/share/pyshared
Installing collected packages: Django
Successfully installed Django
Pelo que sei, o pip -E foo install
acima exposto deve reinstalar uma nova versão do Django. Além disso, se eu disser ao pip para congelar o ambiente, recebo muitos pacotes. Eu esperaria que para um ambiente fresco com --no-site-packages
isso ficaria em branco?
$ pip -E foo freeze
4Suite-XML==1.0.2
BeautifulSoup==3.1.0.1
Brlapi==0.5.3
BzrTools==1.17.0
Django==1.1
... and so on ...
Estou entendendo mal como --no-site-packages
deve funcionar?
python
virtualenv
pip
ianw
fonte
fonte
--no-site-packages
DEPRECATED. Retido apenas para compatibilidade com versões anteriores. Não ter acesso aos pacotes globais de sites agora é o comportamento padrão . Se você quiser acessar pacotes globais de sites, poderá ativar--system-site-packages
.Respostas:
Eu tive um problema como esse, até perceber que (muito antes de descobrir o virtualenv), adicionei diretórios ao PYTHONPATH no meu arquivo .bashrc. Como já fazia mais de um ano, não pensei nisso imediatamente.
fonte
--no-site-packages
ao trabalho. Estou chegando perto de apenas limpar o ubuntu e ver se isso corrige as coisas. Inicialmente, pensei que estava tendo o mesmo problema de PYTHONPATH, mas durante a execuçãoprintenv
não o vejo. A frustração está aumentando, e qualquer ajuda é muito apreciada. Meu sys.path de dentro de um venv criado com--no-site-packages
parece incluir todos os meus diretórios de pacotes. Eu não tenho a menor idéia de como modificar isso. Socorro?PATH
variável global se você estiver encontrando executáveis de fora do virtualenv também.Você precisa ter certeza de que está executando o
pip
binário no ambiente virtual que criou, não no global.Veja um teste:
Criamos o virtualenv com a
--no-site-packages
opção:Verificamos a saída do
freeze
recém-criadopip
:Mas se usarmos o global
pip
, é isso que obtemos:Ou seja, todos os pacotes que
pip
foram instalados em todo o sistema. Ao verificarwhich pip
, obtemos (pelo menos no meu caso) algo como/usr/local/bin/pip
, o que significa que, quando o fazemospip freeze
, chama isso de binário em vez demytest/bin/pip
.fonte
pip
para um caminho específico para o pip global, que não estava sendo substituído durante a ativação do virtualenv.Eventualmente, descobri que, por qualquer motivo, pip -E não estava funcionando. No entanto, se eu realmente ativar o virtualenv e usar o easy_install fornecido pelo virtualenv para instalar o pip, use o pip diretamente de dentro, ele parece funcionar conforme o esperado e mostra apenas os pacotes no virtualenv
fonte
Sei que essa é uma pergunta muito antiga, mas para quem chega aqui procurando uma solução:
Não se esqueça de ativar o virtualenv (
source bin/activate
) antes de executarpip freeze
. Caso contrário, você obterá uma lista de todos os pacotes globais.fonte
Limpe temporariamente o
PYTHONPATH
com:Em seguida, crie e ative o ambiente virtual:
Apenas então:
fonte
--no-site-packages
Como o nome sugere, remova o diretório padrão de pacotes de sitessys.path
. Qualquer outra coisa que viva no caminho padrão do Python permanecerá lá.fonte
PYTHONPATH
comexport PYTHONPATH=
parecia fazer o truque.Um problema semelhante pode ocorrer no Windows, se você chamar scripts diretamente,
script.py
e usar o abridor padrão do Windows e abrir o Python fora do ambiente virtual. A chamada compython script.py
ele usará o Python com o ambiente virtual.fonte
Isso também parece acontecer quando você move o diretório virtualenv para outro diretório (no linux) ou renomeia um diretório pai.
fonte
Eu estava tendo o mesmo problema. O problema para mim (no Ubuntu) era que o nome do meu caminho continha
$
. Quando criei um virtualenv fora do $ dir, ele funcionou bem.Esquisito.
fonte
Um dos possíveis motivos pelos quais o virtualenv pip não funcionará é se alguma das pastas pai tiver espaço em seu nome
/Documents/project name/app
renomeando-o para/Documents/projectName/app
resolver o problema.fonte
Eu vim através do mesmo problema em que o pip in venv ainda funciona como o pip global.
Depois de pesquisar muitas páginas, eu descobri dessa maneira.
1. Crie um novo venv by virtualenv com a opção "--no-site-packages"
observe que, embora a opção "--no-site-packages" seja o padrão verdadeiro desde 1.7.0 no arquivo doc do virtualenv, mas achei que ele não funcionava, a menos que você o ativasse manualmente. Para obter um venv puro, sugiro ativar esta opção 2. Ative o novo ambiente que você criou
Gostaria que esta resposta o ajudasse!
fonte
Aqui está a lista de todas as opções de instalação do pip - não encontrei nenhuma
-E
opção ' ', pode ser a versão mais antiga. Abaixo, estou compartilhando um uso simples do inglês e trabalhandovirtualenv
para os futuros usuários de SO.Tudo parece bem, aceite ativar o
virtualenv
(foo
). Tudo o que faz é permitir que tenhamos um ambiente python múltiplo (e variável), ou seja, várias versões Python, ou várias versões do Django ou qualquer outro pacote Python - caso tenhamos uma versão anterior em produção e desejemos testar a versão mais recente do Django com nosso inscrição.Em suma, criar e usar (ativar) o ambiente virtual (
virtualenv
) possibilita executar ou testar nosso aplicativo ou scripts python simples com diferentes interpretadores Python, por exemplo, Python 2.7 e 3.3 - pode ser uma instalação nova (usando a--no-site-packages
opção) ou todos os pacotes dos existentes / última configuração (usando a--system-site-packages
opção). Para usá-lo, temos que ativá-lo:$ pip install django
irá instalá-lo nos pacotes globais de sites e, da mesma forma, obter ospip freeze
nomes dos pacotes globais de sites.enquanto dentro do venv dir (foo) a execução
$ source /bin/activate
ativará o venv, ou seja, agora qualquer coisa instalada com o pip será instalada apenas no ambiente virtual e somente agora o pip freeze não fornecerá a lista dos pacotes python globais de pacotes de sites. Uma vez ativado:(foo)
antes que o$
sinal indique que estamos usando um ambiente virtual em python, ou seja, qualquer coisa com pip-install, freeze, uninstall será limitada a esse venv e não terá efeito na instalação / pacotes globais / padrão do Python.fonte