Virtualenv en Ubuntu sin paquetes de sitio

He estado usando virtualenv últimamente mientras me desarrollo en Python. Me gusta la idea de un entorno de desarrollo segregado con la opción –no-site-packages, pero hacer esto mientras se desarrolla una aplicación PyGTK puede ser un poco complicado. Los módulos PyGTK se instalan en Ubuntu de forma predeterminada, y me gustaría que un virtualenv (con –no-site-packages) esté al tanto de módulos específicos que se encuentran en otras partes del sistema.

¿Cuál es la mejor manera de hacer esto? ¿O debería simplemente absorberlo y soltar la opción –no-site-packages?

$ virtualenv --no-site-packages --python=/usr/bin/python2.6 myvirtualenv $ cd myvirtualenv $ source bin/activate $ cd lib/python2.6/ $ ln -s /usr/lib/pymodules/python2.6/gtk-2.0/ $ ln -s /usr/lib/pymodules/python2.6/pygtk.pth $ ln -s /usr/lib/pymodules/python2.6/pygtk.py $ ln -s /usr/lib/pymodules/python2.6/cairo/ $ python >>> import pygtk >>> import gtk 

Una forma es agregar las rutas a su código usando sys.path.

 import sys sys.path.append(somepath) 

Otra forma es usar el sitio, que procesa los archivos .pth además de agregar a sys.path.

 import site site.addsitedir(sitedir, known_paths=None) 

https://docs.python.org/library/site.html

Pero probablemente no quiera agregar esto a todos sus códigos relacionados.

He visto la mención de que se utiliza sitecustomize.py para realizar algo como esto, pero después de algunas pruebas no pude hacer que funcionara como se esperaba.

Aquí se menciona que la importación automática de sitecustomize.py terminó en 2.5, si no está en 2.5, inténtelo. (simplemente agregue uno de los métodos de agregar rutas anteriores al archivo y colóquelo en el directorio en el que se ejecuta su progtwig) En la publicación se menciona un método de trabajo alternativo para usuarios de 2.5 en adelante.

http://code.activestate.com/recipes/552729/

Encuentro que en esta situación, los enlaces simbólicos, o incluso copiar archivos específicos (paquetes, módulos, extensiones) funcionan realmente bien.

Permite que el progtwig emule ejecutarse en el entorno de destino, en lugar de cambiar la aplicación para que se adapte al entorno de desarrollo.

La misma oferta para algo como AppEngine.

Echa un vistazo a la secuencia de comandos de gancho postmkvirtualenv aquí:

https://stackoverflow.com/a/9716100/60247

En ese caso, lo está utilizando para importar PyQt y SIP después de crear un nuevo Virtualenv, pero puede agregar los paquetes que necesita a LIBS.

Y vota ese guión porque es fantástico 🙂

Si desea incluir los enlaces a python gtk-2.0 del sistema correspondiente en el virtualenv, puede usar pip para instalar ruamel.venvgtk :

pip install ruamel.venvgtk No tiene que importar nada, los enlaces se configuran durante la instalación.

Esto es especialmente útil si está utilizando tox , en ese caso solo necesita incluir la dependencia (para tox):

 deps: pytest ruamel.venvgtk 

y un entorno python2.7 recién instalado tendrá los enlaces relevantes incluidos antes de que se ejecuten las pruebas.

En esta respuesta se puede encontrar información más detallada sobre cómo se configuran los enlaces.