[Python-es] 'Heredar' un venv dentro de otro

Kiko kikocorreoso en gmail.com
Mie Dic 2 16:12:39 EST 2015


He hecho un script y __funciona__ pero de esa forma. Tengo que seguir
investigando para que no se __rompa__ de forma generalizada.

He hecho un wrapper a la librería venv de python3 para que cree un
virtualenv nuevo y en ese nuevo virtualenv se añade un sitecustomize.py
donde se añade al sys.path las rutas de los site-packages de los venvs de
los que quiero que herede el virtualenv nuevo. Por tanto, el venv hijo
tendría acceso a:

venv_padre
 |
 -------lib/python3.4/site-packages

venv_hijo
 |
 -------lib/python3.4/site-packages

Problemas que tengo que solventar:
-Si en el venv padre he instalado numpy 1.10 y pandas con esa versión de
numpy y en el venv hijo instalo, por ejemplo, numpy 1.9, el pandas del venv
padre se rompe, como no podía ser de otra manera.
-Los ficheros que se añaden en el bin/ del venv padre no los estoy
añadiendo en el bin/ del venv hijo y no puedo acceder. Por ejemplo, si
instalo ipython en el venv padre, desde el venv hijo no puedo acceder a la
consola de ipython usando 'ipython' en la línea de comandos.
-En mi sistema tengo un sitecustomize.py en
/usr/lib/python3.4/sitecustomize.py y se ejecuta ese antes que el mio que
he creado. He tenido que mover ese (cuyo código no hacia nada útil y que no
sé porqué está ahí) para que funcionase mi sitecustomize. Este es jodido
porque no sé como resolver el que haya otro sitecustomize.py que se ejecute
antes que el mio. Puedo modificar el orden del sys.path pero eso igual
rompe otras cosas... Necesito investigar más esto pero no he encontrado
mucha info al respecto.
-Otros problemas que no he encontrado y seguro habrá...

Se aceptan ideas para solventar el primer problema. Se puede hacer un
wrapper a pip y que si intenta instalar un paquete en el venv hijo que ya
está en el padre que lance un warning o no deje instalarlo o chequee todos
los paquetes del padre que dependen de ese paquete y también se actualicen
en el hijo,...

El segundo problema creo que será sencillo de solventar.

El script con todas las ñapas posibles del mundo lo he dejado en:
https://gist.github.com/kikocorreoso/284e1ad934325ca6ed0c

Se agradecen todo tipo de comentarios positivos e ideas brillantes.

Gracias a todos por las ideas aportadas hasta ahora.


El 1 de diciembre de 2015, 14:17, Chema Cortes <pych3m4 en gmail.com> escribió:

>
>
> El mar., 1 dic. 2015 a las 12:22, Alberto Valverde (<alberto en toscat.net>)
> escribió:
>
>> On Sunday, 29 November 2015, Kiko <kikocorreoso en gmail.com> wrote:
>>
>>> Hola.
>>>
>>> No sé si esta será la pregunta rara del día. Ahí va.
>>>
>>> Imaginad que tengo un venv, llamémosle venv-base, donde tengo instalado
>>> cosas que siempre uso (p.e., numpy, scipy, matplotib y pandas) y que suele
>>> ser un poco incordio instalar usando pip.
>>>
>>> ¿Se podría crear un venv que usase estas librerías (las 'heredase' de
>>> venv-base) además de las suyas particulares sin tener que instalar numpy,
>>> scipy, matplotlib, pandas en el nuevo venv?
>>>
>>> Algo parecido a la opción --system-site-packages (
>>> https://virtualenv.readthedocs.org/en/latest/userguide.html#the-system-site-packages-option
>>> )
>>>
>>> No quiero tener numpy, scipy, matplotlib y Pandas instaladas de base en
>>> el sistema pero tampoco quiero tener que instalarlas con cada nuevo venv.
>>>
>>> Conda/Anaconda ayuda a manejar alguno de los problemas pero, sin tener
>>> una burrada de venv's ni de librerías instaladas, tengo carpetas de 6Gb o
>>> más.
>>>
>>> Supongo que lo que quiero no existe y, sin pensar mucho en ello, veo
>>> millones de posibles conflictos a manejar.
>>>
>>> ¿Sería útil que existiera algo así si no existe ya?
>>>
>>> Gracias.
>>>
>>> Saludos.
>>>
>>
>> No lo he probado nunca con Python pero parece ser que con Nix es posible
>> compartir librerías Python de distintas versiobes entre entornos aislados
>> https://nixos.org/wiki/Python. Creo que no funciona en Windows, desafortunadamente.
>> Un saludo
>>
>
> Es lo bueno de NixOS de mantener inmutables las distintas instalaciones y
> sólo añadir "deltas" (al estilo de las estructuras de datos en programación
> funcional).
>
> Pero teniendo docker, es mucho mejor una herencia entre contenedores.
>
>
> --
> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
> http://ch3m4.org/blog
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20151202/e4f0c816/attachment.html>


Más información sobre la lista de distribución Python-es