Pregunta

Últimamente he estado usando virtualenv mientras desarrollaba en Python. Me gusta la idea de un entorno de desarrollo segregado utilizando la opción --no-site-packages, pero hacerlo mientras se desarrolla una aplicación PyGTK puede ser un poco complicado. Los módulos PyGTK se instalan en Ubuntu de manera predeterminada, y me gustaría hacer un virtualenv (con --no-site-packages) consciente de los 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?

¿Fue útil?

Solución

$ 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

Otros consejos

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 archivos .pth además de agregarlos a sys.path.

import site

site.addsitedir(sitedir, known_paths=None)

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

Pero probablemente no desee agregar esto a todo su código relacionado.

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

Aquí se menciona que la importación automática de sitecustomize.py terminó en 2.5, si no está en 2.5 pruébelo. (solo agregue uno de los métodos de agregar ruta al archivo y suéltelo en el directorio donde se ejecuta su programa) En la publicación se menciona un método alternativo para usuarios de 2.5 en adelante.

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

En esta situación, los enlaces simbólicos o incluso la copia de archivos específicos (paquetes, módulos, extensiones) funcionan muy bien.

Permite que el programa emule la ejecución en el entorno de destino, en lugar de cambiar la aplicación para adaptarse al entorno de desarrollo.

El mismo trato para algo como AppEngine.

Echa un vistazo a la secuencia de comandos de enlace 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 script porque es fantástico :)

Si desea incluir los enlaces al python gtk-2.0 del sistema relevante en 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 configurado tendrá los enlaces relevantes incluidos antes de ejecutar las pruebas.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top