2011-06-28 11 views
19

Necesito usar Python en un servidor grande donde no tengo acceso de root. Quiero usar una versión más nueva de numpy que la que está instalada globalmente en la máquina. virtualenv está diseñado exactamente para este propósito, y yo creo mi entorno virtual y que se active con los siguientes comandos:¿Cómo puedo hacer que virtualenv prefiera sus bibliotecas locales sobre las bibliotecas globales?

virtualenv my_personal_python 
source my_personal_python/bin/activate 

luego instalar la nueva versión de la biblioteca que estoy interesado en utilizar

pip install numpy==1.6.0 

El problema es que cuando importo numpy todavía importa la versión global desactualizada, no la única instalación en el directorio my_personal_python/lib/python2.6/site-packacges del entorno virtual.

ya estoy al tanto de una posible solución, la bandera-paquetes --no-sitio, como en:

virtualenv --no-site-packages my_personal_python 

Cuando utilizo este distintivo, la importación se comporta como deseo. Pero no quiero usar esta bandera porque no quiero volver a instalar todos los paquetes localmente, solo quiero anular un par de ellos.

(estoy usando Python 2.6, 1.6.1 virtualenv, y la variable PYTHONPATH en mi máquina no está establecida.)

actualización Incluso si añado el directorio site-packages desde el entorno virtual para Al principio de la ruta de Python, Numpy no se importa desde esta ubicación (aunque otros paquetes se importan desde esta ubicación). Tal vez este problema es específico de numpy y no ocurre con los paquetes en general.

+0

AFAIK, debería funcionar como usted espera. Tal vez sea un error en la versión anterior de virtualenv que presumiblemente está instalado en esa computadora ... –

+0

no estoy seguro de si este es el problema, pero ¿sabe pip que usa el entorno virtual activado? Compruebe y vea si numpy 1.6.0 está instalado en sus paquetes de sitio globales. – mklauber

+0

pip sabe cómo usar el entorno virtual, y ha instalado correctamente la versión 1.6.0 en el directorio de paquetes de sitio del entorno virtual. La versión global de numpy es 1.4.0. – conradlee

Respuesta

7

Comprueba dos cosas.

which python

which pip

Ahora que está seguro de que está ejecutando el más adecuado, comenzar pitón y:

import sys 
print "\n".join(sys.path) 

Entonces pitón de salida y escriba echo $PATH seguido por echo $PYTHONPATH Sospecho que el problema será visible y si no puede solucionarlo configurando PYTHONPATH, entonces puede hacerlo con el site módulo.

3

Esto funcionó para mí.

Mi which python y which pip eran exactamente correctas pero el sys.path era incorrecto. Mi virtualenv está en ~/virtualenvs/envy. Al principio yo estaba haciendo:

export PYTHONPATH=~/virtualenvs/envy/lib/python2.7/site-packages:$PYTHONPATH 

pero esto todavía estaba importando el paquete de todo el sistema en lugar de mi virtualenv uno. PERO Vi this PyCon talk on virtualenv y decidimos probar:

export PYTHONPATH=~/virtualenvs/envy/lib/python2.7:$PYTHONPATH 

Aviso la falta de site-packages en la segunda opción. ¡Y esto realmente funcionó! Espero que ayude a alguien más.

1

Una solución más a este problema (me ayudó, al menos): en mi ~/.local/lib/python2.7/site-packages/easy-install.pth, había líneas (IMHO innecesarias) como /usr/lib/python2.7/dist-packages. La eliminación de estas líneas ayudó, tal vez fueron sobrantes de tiempos mucho más antiguos, cuando easy_install aún hacía cosas extrañas.

Cuestiones relacionadas