Estoy jugando con la combinación de buildout y virtualenv para configurar un entorno de desarrollo aislado de en python que permite hacer compilaciones reproducibles.Buildout y Virtualenv
Hay una receta para el buildout que te permite integrar virtualenv en buildout:
tl.buildout_virtual_python
con este mi buildout.cfg se ve así:
[buildout]
develop = .
parts = script
virtualpython
[virtualpython]
recipe = tl.buildout_virtual_python
headers = true
executable-name = vp
site-packages = false
[script]
recipe = zc.recipe.egg:scripts
eggs = foo
python = virtualpython
Esto desplegará dos ejecutables en ./ bin /:
vp
script
Cuando ejecuto vp, obtengo un diálogo interactivo, aislado de python, como e xpected (no se puede cargar ningún paquete del sistema). lo que se espera ahora, es que si me quedo
./bin/script
que se utiliza la pitón aislado intérprete. Pero no es así, no está aislado como "vp" es (lo que significa que puedo importar bibliotecas desde el nivel del sistema). Sin embargo, puedo ejecutar:
./bin/vp ./bin/script
Que ejecutará el script en un entorno aislado como yo desee. Pero debe haber una forma de especificar esto para hacerlo sin encadenar los comandos. De lo contrario, buildout solo resuelve la mitad de los problemas que esperaba :)
¡Gracias por su ayuda! Patrick
Lo bueno de virtualenv es que modifica el PATH para que los scripts puedan tener "#!/usr/bin/env python "como se supone que deben hacerlo y utilizarán la versión de compilación". ¿Es posible hacer esto sin virtualenv? – Xentac
virtualenv modifica la ruta, pero eso también significa que no debe * olvidar * habilitar virtualenv cada vez que quiera usar el script. Buildout tiene una solución más permanente en ese sentido. Y buildout señala la línea "#! ..." de su script en la python real con la que se ejecutó su buildout, por lo que es correcta para su máquina. Sin virtualenv? Podría escribir un script de shell que establezca PYTHONPATH como algo específico y obtenga * algo * de la funcionalidad de virtualenv. Pero no todos, especialmente no cuando se instala. –
Corrección rápida: 'sys.path [0: 0] = [...]' no reemplaza completamente a sys.path, simplemente inserta más elementos al principio. –