Virtualenv: site.py no es compatible con python 2.7

Creado en 9 nov. 2012  ·  24Comentarios  ·  Fuente: pypa/virtualenv

Usamos python 2.7 exclusivamente y es una sorpresa descubrir hoy que site.py en todos los entornos virtuales con python 2.7 usa site.py de py2.6, que carece de muchas funciones nuevas agregadas en python 2.7.

Comentario más útil

Como solución alternativa: python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())" logra encontrar la ubicación de mi directorio de paquetes de sitios de Python

Todos 24 comentarios

¿Puede dar un ejemplo de lo que no funciona para usted?

site.getsitepackages() no funciona.

Reproducido en 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 fuera de venv funciona para mí -

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

``````

$ ./ve/bin/python -c 'importar sitio; imprimir (sitio. archivo )'
/private/tmp/ve/lib/python2.7/site.pyc
$ python -c 'importar sitio; imprimir (sitio. archivo )'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site.pyc

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

Considere actualizar (y garantizar la compatibilidad con versiones anteriores) site.py

No creo que esto deba marcarse como un bloqueador de lanzamiento. aunque sería genial admitir archivos site.py compatibles con funciones, esta deficiencia ha sido así durante años.

"esta carencia ha sido así durante años". Y diablos, sí, todavía duele... :(
Considere arreglar esto por favor, gracias

Esto me mordió hoy; Sería muy, muy bueno obtener un site.py actualizado incluido en virtualenv ya que la versión anterior 2.6 no tiene cosas como site.getusersitepackages() .

A mí también me mordió y me tomó por sorpresa. Ahora incluso me pregunto qué otros archivos difieren del sistema python (especialmente cuando se usa --system-site-packages ) y qué otros "errores" acechan...

Todavía es válido usar virtualenv 13.1.2 con Python 2.7.6, y se está interponiendo en el trabajo de desarrollo que estoy haciendo.

Aquí hay algunos juegos interactivos:

getsitepackages no está presente en 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 en el 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']
>>>

Editar: woah... Acabo de leer: https://github.com/pypa/virtualenv/pull/697
Creo que probablemente sea mejor dedicar el tiempo a abordar las causas fundamentales, en lugar de este síntoma específico. Dependiendo de cómo vaya la reescritura, estoy más que dispuesto a esperar cualquier cambio que deba ocurrir para resolver este problema, a favor de los cambios discutidos en la reescritura.

Comentario original:
Me acaba de morder este también.

# 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 actualizar site.py para proporcionar site.getsitepackages()

Resuelva este problema con el #555, que puede causar un comportamiento diferente en un entorno virtual si ejecuta -Werror debido a la advertencia de obsolescencia. Dado que tox depende de este paquete para funcionar internamente, no veo mucha forma de evitarlo.

+1 sad_panda y muchas lágrimas

+1 esto me mordió hoy, el código funciona fuera de virtualenv pero no dentro.

+1 bocado, ¿hay alguna actualización? Gracias.

+1 mismo problema con rk (kernel remoto para jupyter).

+1 mordisco, funciona fuera de virtualenv pero no dentro.

Todos, creo que por el momento la mejor solución puede ser vender site.py (o partes de él) en sus proyectos.

Como solución alternativa: python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())" logra encontrar la ubicación de mi directorio de paquetes de sitios de Python

+1

+1 bocado, ¿hay alguna actualización? Gracias.

estoy usando virtualenv 15.0.1 en Ubuntu 16.04 64bit

+1 bocado
(virtualenv 15.1.0 en CentOS 7.5.1804)

Desde que pasé a py3, dejé de usar virtualenv y uso el propio venv de python. Con python 3.6+, un venv minimalista consta de solo un par de enlaces 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

Entonces, no más virtualenv y todas sus peculiaridades para mí. HTH otras personas.

@RemiCardona Uso venv de Python 3 tanto como puedo, pero desafortunadamente tox todavía usa virtualenv (incluso cuando pruebo Python 3), así que tengo este problema cada vez que uso tox para automatizar las pruebas o realizar una integración continua. 😞

Este problema se ha marcado automáticamente como obsoleto porque no ha tenido actividad reciente. Se cerrará si no se produce más actividad. Simplemente agregue un comentario si desea mantenerlo abierto. Gracias por sus aportaciones.

¿Fue útil esta página
0 / 5 - 0 calificaciones