¿Dónde deberían crearse los virtualenvs?

106

Estoy confundido en cuanto a dónde debería poner mis virtualenvs.

Con mi primer proyecto de django, creé el proyecto con el comando

django-admin.py startproject djangoproject

Luego hice cd en el directorio djangoproject y ejecuté el comando

virtualenv env

que creó el directorio del entorno virtual al mismo nivel que el djangoprojectdirectorio interno .

¿Es este el lugar equivocado para crear el virtualenv para este proyecto en particular?

Tengo la impresión de que la mayoría de la gente mantiene todos sus virtualenv juntos en un directorio completamente diferente, por ejemplo ~/virtualenvs, y luego usa virtualenvwrapper para alternar entre ellos.

¿Existe una forma correcta de hacer esto?

Rayo
fuente

Respuestas:

128

Mucha gente usa la herramienta virtualenvwrapper , que mantiene todos los virtualenv en el mismo lugar (el ~/.virtualenvsdirectorio) y permite accesos directos para crearlos y mantenerlos allí. Por ejemplo, puede hacer:

mkvirtualenv djangoproject

y luego más tarde:

workon djangoproject

Probablemente sea una mala idea mantener el directorio virtualenv en el proyecto en sí, ya que no desea distribuirlo (puede ser específico de su computadora o sistema operativo). En su lugar, mantenga un archivo requirements.txt usando pip :

pip freeze > requirements.txt

y distribuir eso. Esto permitirá que otros usuarios de su proyecto reinstalen todos los mismos requisitos en su virtualenv con:

pip install -r requirements.txt
David Robinson
fuente
agradable, nunca había examinado las cosas de pip, pero si lo necesito algún día, esto será útil
Joran Beasley
pip es muy popular en la comunidad de Django y muy fácil de usar.
David Robinson
Gracias David, eso es lo que pensé. Sabía lo de los requisitos y lo estoy haciendo. Simplemente no estaba seguro de adónde debería ir el venv. Su comentario acerca de que es específico del sistema operativo es una buena justificación para hacer lo que sugiere.
Ray
¿Es posible mover un entorno virtual una vez creado? Sin saberlo, lo puse dentro del directorio de mi proyecto
James Wierzba
6
No es una gran justificación en mi opinión. ¿No es esto para lo que es .gitignore?
Josh Noe
24

Cambiar la ubicación del directorio virtualenv lo rompe

Esta es una de las ventajas de colocar el directorio fuera del árbol del repositorio, por ejemplo, debajo de ~/.virtualenvscon virutalenvwrapper.

De lo contrario, si lo mantiene en el árbol del proyecto, mover la ubicación del proyecto romperá el virtualenv.

Ver: Cambiar el nombre de una carpeta virtualenv sin romperla

Lo hay --relocatablepero se sabe que no es perfecto.

Otra ventaja menor: no .gitignorees necesario.

Las ventajas de ponerlo en gitignored en el árbol del proyecto son:

  • mantiene las cosas relacionadas juntas.
  • Probablemente nunca reutilizará un virtualenv dado en todos los proyectos, por lo que colocarlo en otro lugar no brinda mucha ventaja
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
fuente
3
¡Este es el único argumento razonable que he visto para crear carpetas virtualenv fuera de los árboles del proyecto! Otras pautas simplemente parecen repetir el dogma de la 'centralización' como si fuera inherentemente una mejor práctica en lugar de un compromiso desafortunado debido a que los virtualenvs están fundamentalmente rotos (¡aunque bastante útiles!).
rob3c
Lo siento, hay algo que no me queda claro, así que ¿estás recomendando crearlo en el árbol del proyecto y luego "ignorarlo" o crearlo en ~ / .virtualenvs? ¿A qué se refiere "Si no fuera por eso"?
aderchox
1
@aderchox hay una compensación: colóquelo en el árbol del proyecto y el árbol se mueve, debe reinstalarlo, o ponerlo en ~ pero administrar en un subdirectorio adicional fuera del proyecto.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
5

El lugar generalmente aceptado para colocarlos es el mismo lugar donde los coloca la instalación predeterminada de virtualenvwrapper: ~/.virtualenvs

Relacionado: virtualenvwrapper es una excelente herramienta que proporciona atajos para los comandos comunes de virtualenv. http://www.doughellmann.com/projects/virtualenvwrapper/

Mayordomo de emmett
fuente
0

Si lo usa pyenv install Python, pyenv-virtualenv será una mejor práctica. Si se establece un .python-versionarchivo, se puede activar o desactivar automáticamente el entorno virtual cuando cambia la carpeta de trabajo. Pyenv-virtualenvtambién ponga todo el entorno virtual en la $HOME/.pyenv/versionscarpeta.

Aston
fuente
0

Desde mi experiencia personal, recomendaría organizar todos los entornos virtuales en un solo directorio. A menos que alguien tenga una memoria extremadamente nítida y pueda recordar archivos / carpetas esparcidos por el sistema de archivos. No soy un gran fanático del uso de otras herramientas solo para administrar entornos virtuales. En VSCode, si configuro ( python.venvPath) el directorio que contiene todos los entornos virtuales, puede reconocerlos automáticamente a todos.

Tejas Sarade
fuente