2008-10-30 25 views
24

He estado usando virtualenv últimamente mientras desarrollo en python. Me gusta la idea de un entorno de desarrollo segregado utilizando 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 están instalados en Ubuntu por defecto, 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.Virtualenv en Ubuntu sin paquetes de sitio

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

Respuesta

34
$ 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 
+8

Esto me puso en el camino correcto, pero las cosas han cambiado un poco con Ubuntu 11.10. Para Python 2.7 en Ubuntu 11.10, algo más como esto: ln -sf /usr/lib/python2.7/dist-packages/{glib,gobject,cairo,gtk-2.0,pygtk.py,pygtk.pth} lib/python2 .7/site-packages – keturn

+2

Nota: Las carpetas gtk y los archivos pth deben ir en lib/python2.6/site-packages, no en lib/python2.6. Ver: http://stackoverflow.com/questions/3580520/python-virtualenv-gtk-2-0 – jmanning2k

+2

Aquí hay una pequeña edición de la versión de keturns para usar el env var: $ ln -sf /usr/lib/python2.7/ dist-packages/{glib, gobject, cairo, gtk-2.0, pygtk.py, pygtk.pth} $ VIRTUAL_ENV/lib/python2.7/site-packages –

4

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

import sys 

sys.path.append(somepath) 

Otra forma es utilizar el sitio, que procesa 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 es probable que no quiere añadir este a todo el código relacionado.

He visto mencionar que sitecustomize.py se usa 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 la versión 2.5, pruébelo. (simplemente agregue uno de los métodos de agregar ruta al archivo y colóquelo 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/

1

que encuentro en esta situación, enlaces simbólicos, o incluso copiar archivos específicos (paquetes, módulos, extensiones) funciona muy bien.

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

Lo mismo para algo como App Engine.

+0

Yeh, pero donde los enlaces simbólicos? ¿Y qué necesitaría crear un enlace simbólico para algo como PyGTK? –

+0

Enlace a su sitio-paquetes. En mi Ubuntu aquí, tengo /usr/lib/python-support/python-gtk2/python2.5/gtk-2.0/gtk. Ya hay /var/lib/python-support/python2.5/gtk-2.0/gtk enlaces allí. Parece un buen comienzo, y es posible que necesite prueba y error. Pero podrás escribirlo para la próxima vez. –

1

Salida del script gancho postmkvirtualenv aquí:

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

En ese caso, lo está usando para importar PyQt y SIP después de una nueva virtualenv se crea, pero puede agregar los paquetes que necesitas LIBS.

y votar ese guión porque es fantástico :)

0

Si desea incluir los enlaces a Python GTK-2.0 del sistema relevante en el virtualenv, sólo puede utilizar PIP para instalar ruamel.venvgtk:

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

Esto es especialmente útil si está utilizando tox, en ese caso sólo es necesario incluir la dependencia (por tox):

deps: 
    pytest 
    ruamel.venvgtk 

y un entorno de configuración recién python2.7 tendrán los enlaces pertinentes incluidos antes de ejecutar las pruebas

información más detallada sobre cómo los enlaces son de configuración se pueden encontrar en this answer

Cuestiones relacionadas