El almacenamiento del directorio virtualenv dentro de git le permitirá, como ha señalado, implementar toda la aplicación con solo hacer un clon de git (además de instalar y configurar Apache / mod_wsgi). Un problema potencialmente significativo con este enfoque es que en Linux la ruta completa se codifica en los scripts de venv's enable, django-admin.py, easy_install y pip. Esto significa que su virtualenv no funcionará por completo si desea utilizar una ruta diferente, tal vez para ejecutar varios hosts virtuales en el mismo servidor. Creo que el sitio web realmente puede funcionar con las rutas incorrectas en esos archivos, pero tendría problemas la próxima vez que intente ejecutar pip.
La solución, ya dada, es almacenar suficiente información en git para que durante la implementación pueda crear virtualenv y realizar las instalaciones necesarias de pip. Por lo general, las personas corren pip freeze
para obtener la lista y luego la almacenan en un archivo llamado require.txt. Se puede cargar con pip install -r requirements.txt
. RyanBrady ya mostró cómo puede encadenar las declaraciones de implementación en una sola línea:
# before 15.1.0
virtualenv --no-site-packages --distribute .env &&\
source .env/bin/activate &&\
pip install -r requirements.txt
# after deprecation of some arguments in 15.1.0
virtualenv .env && source .env/bin/activate && pip install -r requirements.txt
Personalmente, acabo de ponerlos en un script de shell que ejecuto después de hacer el clon git o git pull.
El almacenamiento del directorio virtualenv también hace que sea un poco más complicado manejar las actualizaciones de pip, ya que tendrá que agregar / eliminar manualmente y confirmar los archivos resultantes de la actualización. Con un archivo require.txt, simplemente cambia las líneas apropiadas en require.txt y vuelve a ejecutarlo pip install -r requirements.txt
. Como ya se señaló, esto también reduce el "envío de spam".