Dove dovrebbero essere creati virtualenvs?


107

Sono confuso su dove dovrei mettere i miei virtualenvs.

Con il mio primo progetto django, ho creato il progetto con il comando

django-admin.py startproject djangoproject

Quindi ho cd nella directory djangoproject e ho eseguito il comando

virtualenv env

che ha creato la directory dell'ambiente virtuale allo stesso livello della djangoprojectdirectory interna .

È questo il posto sbagliato in cui creare il virtualenv per questo particolare progetto?

Ho l'impressione che la maggior parte delle persone tenga insieme tutti i propri virtualenv in una directory completamente diversa, ad esempio ~/virtualenvs, e quindi utilizzi virtualenvwrapper per passare da uno all'altro.

C'è un modo corretto per farlo?

Risposte:


128

Molte persone usano lo strumento virtualenvwrapper , che mantiene tutti i virtualenv nello stesso posto (la ~/.virtualenvsdirectory) e consente scorciatoie per crearli e mantenerli lì. Ad esempio, potresti fare:

mkvirtualenv djangoproject

e poi più tardi:

workon djangoproject

Probabilmente è una cattiva idea mantenere la directory virtualenv nel progetto stesso, dato che non vuoi distribuirla (potrebbe essere specifica per il tuo computer o sistema operativo). Invece, mantieni un file requirements.txt usando pip :

pip freeze > requirements.txt

e distribuiscilo. Ciò consentirà ad altri che utilizzano il tuo progetto di reinstallare tutti gli stessi requisiti nel loro virtualenv con:

pip install -r requirements.txt

bello, non avevo mai esaminato la roba del pip, ma se avessi bisogno di un giorno questo tornerà utile
Joran Beasley

pip è molto popolare nella comunità Django e molto facile da usare.
David Robinson

Grazie David, è quello che pensavo. Conoscevo la questione dei requisiti e lo sto facendo. Solo che non ero sicuro di dove dovesse andare il venv. Il tuo commento sul fatto che sia specifico del sistema operativo è una buona giustificazione per fare ciò che suggerisci.
Ray

È possibile spostare un ambiente virtuale dopo che è stato creato? L'ho messo
inconsapevolmente nella

6
Non una grande giustificazione IMO. Non è questo a cosa serve .gitignore?
Josh Noe

24

La modifica della posizione della directory virtualenv la interrompe

Questo è un vantaggio di mettere la directory fuori dall'albero del repository, ad esempio sotto ~/.virtualenvswith virutalenvwrapper.

Altrimenti, se lo tieni nell'albero del progetto, lo spostamento della posizione del progetto interromperà il virtualenv.

Vedi: Rinominare una cartella virtualenv senza romperla

C'è --relocatablema si sa che non è perfetto.

Un altro piccolo vantaggio: non devi farlo .gitignore.

I vantaggi di metterlo gitignored nell'albero del progetto stesso sono:

  • mantiene le cose correlate vicine tra loro.
  • probabilmente non riutilizzerai mai un dato virtualenv tra i progetti, quindi metterlo da qualche altra parte non dà molti vantaggi

3
Questo è l'unico argomento ragionevole che ho visto per creare cartelle virtualenv al di fuori degli alberi del progetto! Altre linee guida sembrano semplicemente ripetere il dogma della "centralizzazione" come se fosse intrinsecamente una best practice invece di uno sfortunato compromesso dovuto al fatto che i virtualenvs sono stati fondamentalmente infranti (anche se abbastanza utili!).
rob3c

Spiacente, qualcosa non mi è chiaro, quindi mi consigliate di crearlo nell'albero del progetto e poi "gitignoring" o crearlo in ~ / .virtualenvs? A cosa si riferisce "Se non fosse per quello"?
aderchox

1
@aderchox c'è un compromesso: mettilo nell'albero del progetto e l'albero si sposta devi reinstallarlo, o metterlo su ~ ma gestisci la sottodirectory extra al di fuori del progetto.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功


0

Se usi pyenv install Python , allora pyenv-virtualenv sarà una best practice. Se impostato .python-versionfile, può attivare o disattivare automaticamente l'ambiente virtuale quando si cambia cartella di lavoro. Pyenv-virtualenvmetti anche tutti gli env virtuali nella $HOME/.pyenv/versionscartella.


0

Dalla mia esperienza personale, consiglierei di organizzare tutti gli ambienti virtuali in una singola directory. A meno che qualcuno non abbia una memoria estremamente nitida e possa ricordare file / cartelle sparsi nel file system. Non è un grande fan dell'utilizzo di altri strumenti solo per gestire gli ambienti virtuali. In VSCode se configuro ( python.venvPath) la directory contenente tutti gli ambienti virtuali, può riconoscerli automaticamente tutti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.