Paquete de Python instalado globalmente, pero no en un virtualenv (PyGTK)

Estoy teniendo algunos problemas extraños con PyGTK en “virtualenv“. gtk no importa en mi virtualenv, mientras que sí importa en mi instalación global de python. (No tuve este problema en particular la semana pasada, supongo que alguna actualización de software le molestó algo).

¿Hay una buena manera de resolver este comportamiento?

Se muestra aquí: importando gtk a nivel mundial,

tom@zeppelin:~$ python Python 2.7.1+ (r271:86832, Sep 27 2012, 21:12:17) [GCC 4.5.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import gtk >>> gtk  

y luego no poder importar gtk,

 tom@zeppelin:~$ workon py27 (py27)tom@zeppelin:~$ python Python 2.7.1+ (r271:86832, Sep 27 2012, 21:12:17) [GCC 4.5.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import gtk Traceback (most recent call last): File "", line 1, in  ImportError: No module named gtk 

Desafortunadamente, esto ha roto mi entorno ipython –pylab: http://pastebin.com/mM0ur7Hc

ACTUALIZACIÓN: pude arreglar esto agregando enlaces simbólicos como lo sugiere grepic / este hilo: Python: virtualenv – gtk-2.0

con una pequeña diferencia, a saber, que mi paquete “cairo” estaba ubicado en /usr/lib/pymodules/python2.7/cairo/ en lugar de en /usr/lib/python2.7/dist-packages/cairo .

SEGUNDA ACTUALIZACIÓN: También me pareció útil agregar las siguientes líneas a mi venv/bin/activate :

 export PYTHONPATH=$PYTHONPATH:/home/tom/.virtualenvs/py27/lib/python2.7/dist-packages export PYTHONPATH=$PYTHONPATH:/home/tom/.virtualenvs/py27/lib/python2.7/dist-packages/gtk-2.0 export PYTHONPATH=$PYTHONPATH:/usr/lib/pymodules/python2.7/gtk-2.0 

(Sospecho que uno o más de estos son innecesarios, pero he estado jugando con esto por mucho tiempo y he decidido dejar de investigar, mi configuración ahora funciona y estoy satisfecho).

¡Problema resuelto! Gracias a todos.

Entonces, normalmente gtk vive en un lugar como /usr/lib/python2.7/dist-packages que se encuentra en su ruta de Python en su entorno global, pero no en su entorno virtual.

Es posible que desee simplemente agregar la ruta a gtk manualmente con algo como

 import sys sys.path.append("/usr/lib/python2.7/dist-packages/gtk") 

También puede cambiar la ruta cuando active el entorno virtual. Abre venv / bin / activar. Es un archivo de aspecto aterrador, pero al final puedes poner:

 export PATH=$PATH:/my/custom/path 

Guarde eso y la próxima vez que active el entorno virtual con:

 source venv/bin/activate 

Tu camino personalizado estará en el camino. Puedes verificar esto con

 echo $PATH 

Un enfoque alternativo que sugiere Python: virtualenv – gtk-2.0 es ir a su directorio virtualenv y agregar un directorio ‘dist-packages’ y crear enlaces simbólicos al paquete gtk que estaba usando anteriormente:

 mkdir -p venv/lib/python2.7/dist-packages/ cd venv/lib/python2.7/dist-packages/ 

Para GTK2:

 ln -s /usr/lib/python2.7/dist-packages/glib/ glib ln -s /usr/lib/python2.7/dist-packages/gobject/ gobject ln -s /usr/lib/python2.7/dist-packages/gtk-2.0* gtk-2.0 ln -s /usr/lib/python2.7/dist-packages/pygtk.pth pygtk.pth ln -s /usr/lib/python2.7/dist-packages/cairo cairo 

Para GTK3:

 ln -s /usr/lib/python2.7/dist-packages/gi gi 

Revelación completa: siento que estas dos soluciones son un tanto piratas, lo cual está bien dado que usted dice que la pregunta es urgente. Probablemente haya una forma “adecuada” de extender un entorno virtual, así que avísenos si finalmente descubre la mejor solución. Puede tener algo de suerte con http://www.virtualenv.org/en/latest/index.html#creating-your-own-bootstrap-scripts

Intente crear su entorno virtual con la marca –system-site-packages.

Otra forma de hacer esto es crear un archivo .pth en el directorio de paquetes de sitio de su virtualenv

p.ej

(en /lib/python2.7/site-packages/dist-packages.pth )

 /usr/lib/python2.7/dist-packages/ 

Esto solucionó el problema que estaba teniendo con la versión instalada de pycairo de apt-get

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 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.

Ahora es posible resolver esto usando vext . Vext le permite instalar paquetes en un virtualenv que accede individualmente a los paquetes de su sistema. Para acceder a PyGTK, haga lo siguiente:

 pip install vext pip install vext.pygtk