Virtualenv: site.py não é compatível com python 2.7

Criado em 9 nov. 2012  ·  24Comentários  ·  Fonte: pypa/virtualenv

Usamos o python 2.7 exclusivamente e é uma surpresa descobrir hoje que site.py em todos os envs virtuais com python 2.7 usam o site.py do py2.6 que carece de muitas novas funções adicionadas no python 2.7.

Comentários muito úteis

Como solução alternativa: python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())" consegue encontrar a localização do meu diretório de pacotes de sites Python

Todos 24 comentários

você pode dar um exemplo do que não está funcionando para você?

site.getsitepackages() não funciona.

Reproduzido no OS X:

$ virtualenv -p python2.7 ve
$ ./ve/bin/python -c 'import site; print(getattr(site, "getsitepackages"))'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute 'getsitepackages'

Correr fora do venv funciona para mim -

``` $ python -c 'import site; print(getattr(site, "getsitepackages"))' <function getsitepackages at 0x104198410>

``````

$ ./ve/bin/python -c 'site de importação; print(site. arquivo )'
/private/tmp/ve/lib/python2.7/site.pyc
$ python -c 'site de importação; print(site. file )'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site.pyc

We ship our own `./virtualenv_embedded/site.py`

Considere atualizar (e garantir a compatibilidade com versões anteriores) site.py

Eu não acho que isso deve ser marcado como um bloqueador de lançamento. embora seja ótimo oferecer suporte a arquivos site.py compatíveis com recursos, essa deficiência é assim há anos.

"essa deficiência é assim há anos". E sim, ainda dói... :(
Considere consertar isso plz, thx

Isso me mordeu hoje; seria muito, muito bom ter um site.py atualizado incluído em virtualenv já que a versão 2.6 antiga não tem coisas como site.getusersitepackages() .

Ele me mordeu também, e me pegou desprevenido. Agora estou até me perguntando quais outros arquivos diferem do python do sistema (especialmente ao usar --system-site-packages ) e quais outros "bugs" estão à espera…

Ainda é válido usando virtualenv 13.1.2 com Python 2.7.6, e está atrapalhando alguns trabalhos de desenvolvimento que estou fazendo.

Aqui estão algumas brincadeiras interativas:

getsitepackages não está presente no virtualenv
$ virtualenv --version
13.1.2
$ virtualenv test
New python executable in test/bin/python
Installing setuptools, pip, wheel...done.
$ source test/bin/activate
$ which python
/home/user/test/bin/python
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import site
>>> 'getsitepackages' in dir(site)
False
>>> site.getsitepackages()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'getsitepackages'
>>>
getsitepackages está presente no sistema Python
$ deactivate
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import site
>>> 'getsitepackages' in dir(site)
True
>>> site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
>>>

Edit: woah...... Acabei de ler: https://github.com/pypa/virtualenv/pull/697
Acho que o tempo provavelmente é mais bem gasto abordando as causas-raiz, em vez desse sintoma específico. Dependendo de como a reescrita for, estou mais do que disposto a esperar por quaisquer alterações que precisem ocorrer para resolver esse problema, em favor das alterações discutidas na reescrita.

Comentário Original:
Acabei de ser mordido por este também.

# Tried with and without --system-site-packages

[username@hostname] ~/dir $ virtualenv --system-site-packages venv
Using base prefix '/usr'
New python executable in venv/bin/python3.4
Also creating executable in venv/bin/python
Installing setuptools, pip, wheel...done.
[username@hostname] ~/dir $ venv/bin/python
Python 3.4.3 (default, Jul 28 2015, 18:20:59) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import site
>>> site.getsitepackages()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'getsitepackages'
>>> 

considere atualizar site.py para fornecer site.getsitepackages()

Acerte este problema com #555, que pode causar um comportamento diferente em um ambiente virtual se você executar com -Werror devido ao aviso de depreciação. Como o tox depende desse pacote para funcionar internamente, não vejo muita maneira de contornar isso.

+1 sad_panda e muitas lágrimas

+1 isso me mordeu hoje, o código funciona fora do virtualenv, mas não dentro.

+1 mordida, há alguma atualização? Obrigado.

+1 mesmo problema com rk (kernel remoto para jupyter).

+1 mordida, funciona fora do virtualenv, mas não dentro.

Todos, eu acho que por enquanto a melhor solução pode ser a venda de site.py (ou partes dele) em seus projetos.

Como solução alternativa: python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())" consegue encontrar a localização do meu diretório de pacotes de sites Python

+1

+1 mordida, há alguma atualização? Obrigado.

estou usando virtualenv 15.0.1 no Ubuntu 16.04 64bit

+1 mordida
(virtualenv 15.1.0 no CentOS 7.5.1804)

Desde que mudei para py3, parei de usar virtualenv e uso o próprio venv do python. Com o python 3.6+, um venv minimalista compreende apenas alguns links simbólicos:

$ python3.6 -m venv --without-pip grut
$ tree grut/
grut/
├── bin
│   ├── activate
│   ├── activate.csh
│   ├── activate.fish
│   ├── python -> python3.6
│   ├── python3 -> python3.6
│   └── python3.6 -> /usr/bin/python3.6
├── include
├── lib
│   └── python3.6
│       └── site-packages
├── lib64 -> lib
└── pyvenv.cfg

6 directories, 7 files

Então, chega de virtualenv e todas as suas peculiaridades para mim. HTH outras pessoas.

@RemiCardona Eu uso venv do Python 3 o máximo que posso, mas infelizmente tox ainda usa virtualenv (mesmo ao testar o Python 3), então estou com esse problema toda vez que uso tox para automatizar testes ou fazer integração contínua. 😞

Este problema foi marcado automaticamente como obsoleto porque não teve atividade recente. Será fechado se não ocorrer mais nenhuma atividade. Basta adicionar um comentário se você quiser mantê-lo aberto. Obrigado por suas contribuições.

Esta página foi útil?
0 / 5 - 0 avaliações