Reverta a opção `--no-site-packages` com virtualenv


126

Eu criei um virtualenv usando a --no-site-packagesopção e instalei muitas bibliotecas. Agora eu gostaria de reverter a --no-site-packagesopção e usar também os pacotes globais.

Posso fazer isso sem recriar o virtualenv?

Mais precisamente:

Gostaria de saber o que exatamente acontece ao criar um virtualenv usando a --no-site-packagesopção em vez de não usar essa opção.

Se eu sei o que acontece, posso descobrir como desfazê-lo.


uma outra pergunta foi marcada como duplicada e recebeu uma resposta que também pode ser interessante aqui.
mariotomo

Respostas:


162

Tente remover (ou renomear) o arquivo no-global-site-packages.txtna sua Libpasta no seu ambiente virtual.

Onde venv é o nome do seu ambiente virtual e python3.4 corresponde à versão do python envolvida, por exemplo:

$ rm venv/lib/python3.4/no-global-site-packages.txt

E se você mudar de idéia e quiser colocá-lo de volta:

$ touch venv/lib/python3.4/no-global-site-packages.txt

Nota: Se você não vir o arquivo acima, terá uma versão mais recente do virtualenv. Você vai querer seguir esta resposta vez


18
Isso fará isso. A existência (ou inexistência) desse arquivo é o único efeito direto do sinalizador no-site-packages. O site.py personalizado do Virtualenv procura esse arquivo para decidir se deseja adicionar diretórios globais de pacotes de sites ao sys.path.
Carl Meyer

Brilhante! Isso foi feito! Muito obrigado por essa resposta e obrigado a Carl Meyer pelo comentário adicional.
Olivier Verdier 31/07

1
isso está virtualenv/python2.7/no-global-site-packages.txtno meu servidor ubuntu.
precisa saber é

4
A versão do Windows do virtualenv contém o virtualenv/pyenv.cfgarquivo. Há uma opção para site-packages: include-system-site-packages = false Alterar este valor e chamar Activate.ps1
georgik

@georgik - que também funciona para a versão Linux do venvfor Python 3.4.
Tomasz Dzieniak

13

Pelo menos para o Python 3.5.2, há um pyvenv.cfgarquivo na raiz do diretório virtualenv. Tudo que você precisa fazer é mudar o include-system-site-packagessinalizador de falsepara true:

home = /usr/bin
include-system-site-packages = false  # <- change this to "true"
version = 3.5.2

12

Ao usar o virtualenvwrapper para gerenciar os virtualenvs, você pode usar a função shell toggleglobalsitepackagespara alternar entre usar e não usar pacotes de sites.


2

Tente adicionar um link simbólico entre /virtualenv_root/lib/e/path/to/desired/site-packages/


+1 Isso funciona no meu sistema (openSUSE Linux 12.3, Python 2.7.3, virtualenv 1.8.4); Eu não tenho no-global-site-packages.txtlugar nenhum.
Aaron Digulla

2

Vá para a sua pasta venv e abra pyvenv.cfg. (Por exemplo, se seu ambiente virtual for chamado myenv, o arquivo será localizado em myenv\pyvenv.cfg)

Você verá uma configuração booleana chamada include-system-site-packages

Defina essa configuração truepara usar pacotes globais

Se você deseja desativar o uso de pacotes globais, basta definir essa configuração como falsealternativa.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.