¿Qué tipo de estructura de directorios se debe seguir al usar virtualenv
? Por ejemplo, si estuviera construyendo una aplicación WSGI y creara un virtualenv llamado foobar
, comenzaría con una estructura de directorio como:
/foobar
/bin
{activate, activate.py, easy_install, python}
/include
{python2.6/...}
/lib
{python2.6/...}
Una vez creado este entorno, ¿dónde colocaría uno el suyo?
- archivos de Python?
- archivos estáticos (imágenes / etc)?
- paquetes "personalizados", como los que están disponibles en línea pero que no se encuentran en la tienda de quesos?
en relación con los virtualenv
directorios?
(Suponga que ya sé dónde deberían ir los directorios virtualenv ).
python
project
virtualenv
Phillip B Oldham
fuente
fuente
Respuestas:
virtualenv
proporciona una instancia de intérprete de Python, no una instancia de aplicación. Normalmente, no crearía los archivos de su aplicación dentro de los directorios que contienen el Python predeterminado de un sistema, del mismo modo no es necesario ubicar su aplicación dentro de un directorio virtualenv.Por ejemplo, puede tener un proyecto en el que tenga varias aplicaciones que utilicen el mismo virtualenv. O puede estar probando una aplicación con un virtualenv que luego se implementará con un sistema Python. O puede estar empaquetando una aplicación independiente donde podría tener sentido tener el directorio virtualenv ubicado en algún lugar dentro del directorio de la aplicación.
Entonces, en general, no creo que haya una respuesta correcta a la pregunta. Y lo bueno
virtualenv
es que admite muchos casos de uso diferentes: no es necesario que haya una forma correcta.fuente
virtualenvwrapper
) es cuando quiero editar elpostactivate
ypostdeactivate
ganchos.virtualenv
directorio, pero compararlovirtualenv
con el sistema python no es útil, porque el propósito devirtualenv
es reparar dependencias rotas y aislar proyectos para que puedan usar diferentes versiones de paquetes e incluso versiones de Python (me doy cuenta de que esto fue escrito antes -python3). Permitir que las aplicaciones compartan unvirtualenv
usovirtualenv
como si fuera python del sistema, dejando a las aplicaciones vulnerables a los mismos problemas que virtualenv está diseñado para resolver.There should be one obvious way to do it
; lógicamente debería ser 1: 1Si solo tiene unos pocos proyectos de vez en cuando, nada le impide crear un nuevo virtualenv para cada uno y poner sus paquetes dentro:
La ventaja de este enfoque es que siempre puede estar seguro de encontrar el script de activación que pertenece al proyecto dentro.
Si decides ser un poco más organizado, deberías considerar poner todos tus virtualenvs en una carpeta y nombrar a cada uno de ellos según el proyecto en el que estás trabajando.
De esta manera, siempre puede comenzar de nuevo con un nuevo virtualenv cuando las cosas vayan mal y los archivos de su proyecto se mantienen seguros.
Otra ventaja es que varios de sus proyectos pueden usar el mismo virtualenv, por lo que no tiene que hacer la misma instalación una y otra vez si tiene muchas dependencias.
Para los usuarios que regularmente tienen que configurar y eliminar virtualenv, tendría sentido mirar virtualenvwrapper.
Con virtualenvwrapper puedes
Ya no tienes que preocuparte por dónde están tus virtualenvs cuando trabajas en los proyectos "foo" y "bar":
Así es como empiezas a trabajar en el proyecto "foo":
Entonces, cambiar a la "barra" del proyecto es tan simple como esto:
Bastante ordenado, ¿no?
fuente
virtualenvwrapper
. Abstrae perfectamente el virtualenv sin dejar de ofrecerle todos los beneficios.venv/
directorio en el mismo nivel que el del proyectoBASE_DIR
.Debido a que los virtualenv no son reubicables, en mi opinión, es una mala práctica colocar los archivos de su proyecto dentro de un directorio virtualenv. El virtualenv en sí mismo es un artefacto de desarrollo / implementación generado (algo así como un archivo .pyc), no parte del proyecto; debería ser fácil eliminarlo y recrearlo en cualquier momento, o crear uno nuevo en un nuevo host de implementación, etc.
De hecho, muchas personas usan virtualenvwrapper , que elimina los virtualenvs reales de su conciencia casi por completo, colocándolos todos uno al lado del otro en $ HOME / .virtualenvs por defecto.
fuente
virtualenv --relocatable myvenv
consulte stackoverflow.com/a/6628642/1335793 solo porque puede no significa que deba hacerlo.Si le da a su proyecto un
setup.py
, pip puede importarlo directamente desde el control de versiones.Haz algo como esto:
El
-e
colocará el proyectomyproject/src
, pero lo vincularámyproject/lib/pythonX.X/site-packages/
, por lo que cualquier cambio que realice se recogerá inmediatamente en los módulos que lo importan desde su localsite-packages
. El#egg
bit le dice a pip qué nombre desea darle al paquete de huevos que crea para usted.Si no lo usa
--no-site-packages
, tenga cuidado de especificar que desea que pip se instale en virtualenv con la-E
opciónfuente