Incluyendo el paquete global en un virtualenv que ha sido creado con –no-site-packages

Por lo general, prefiero crear opciones virtuales con la opción –no-site-packages para un mayor aislamiento, y también porque los paquetes globales predeterminados de Python incluyen muchos paquetes, y generalmente la mayoría de ellos no son necesarios. Sin embargo, todavía me gustaría mantener algunos paquetes selectos en global, como PIL o psycopg2. ¿Hay una buena manera de incluirlos en el virtualenv, que también se puede automatizar fácilmente?

Si está utilizando virtualenvwrapper y es posible que pueda utilizar el script postmkvirtualenv para crear automáticamente enlaces simbólicos en el nuevo directorio de paquetes virtuales de virtualenv.

#!/bin/sh cdsitepackages ln -s /path/to/system/site-packages/package-name cdvirtualenv 

Si está utilizando virtualenvwrapper , el comando de shell add2virtualenv debe estar presente en un virtualenv activo. Utilizar:

 add2virtualenv /path/to/package 

para agregar una entrada al archivo PTH _virtualenv_path_extensions.pth en tus paquetes de sitio virtualenv.

La ventaja de usar add2virtualenv en lugar de crear enlaces simbólicos, es que puede eliminar el paquete para que no sea importable comentando su línea en el archivo PTH. Esto facilita la verificación de la validez de su código en comparación con varias versiones de una biblioteca de la que depende.

Realmente no he intentado esto con esos paquetes específicos, pero supongo que un simple enlace simbólico de los paquetes de sitio globales al paquete de sitio de virtualenv podría funcionar, y esto es fácil de escribir.