Virtualenv e controllo della versione del codice sorgente


84

Recentemente ho avviato un progetto Django e ho subito capito che virtualenv sarà davvero utile per molti motivi. Ho impostato virtualenv e il mio progetto, ma ora mi chiedo quale file dovrei aggiungere al mio controllo del codice sorgente (nel mio caso, Mercurial). Devo aggiungere tutti i file nella cartella venv? Come posso assicurarmi che un collega possa clonare e iniziare a lavorare immediatamente senza dover configurare di nuovo l'env?


18
Non consiglierei di mettere virtualenv sotto il controllo del codice sorgente: non sarà portabile su versioni di python, sistemi operativi o piattaforme a 32/64 bit. Invece, usa solo ~/path/to/virtualenv/bin/pip freeze > ~/path/to/repo/requirements.txt. Altri sviluppatori avranno bisogno di impostare la propria virtualenv, ma è letteralmente due comandi - virtualenv ~/path/to/env, ~/path/to/env/bin/pip install -r ~/path/to/requirements.txt.
AdamKG

1
Caro Googler, vedi anche: stackoverflow.com/a/6012590/82216

Risposte:


106

Generi un file "requisiti" (di solito requirements.txt) che impegni con il tuo progetto:

pip freeze > requirements.txt

Quindi, ogni sviluppatore configurerà il proprio virtualenv ed eseguirà:

pip install -r requirements.txt

6

Tutti questi problemi ambientali sono abbastanza comuni quando si esegue lo sviluppo di python / django! Ho affrontato tutti questi problemi e ho provato alcune soluzioni! Cose che ho testato:

  1. Progetto in esecuzione locale
  2. Progetto in esecuzione in virtualenv
  3. Progetto in esecuzione in una VM
  4. Progetto in esecuzione in una VM, utilizzando vagrant

La soluzione migliore che ho trovato è stata la # 4! perché l'azienda in cui lavoravo, ogni persona nel team ha un sistema operativo diverso, tutti i tipi di Windows, Mac e Linux, e per installare tutte le dipendenze per ogni ambiente ci vuole tempo! Quindi abbiamo deciso di provare virtualenv, che è davvero buono! ma comunque ogni persona deve creare il proprio ambiente. Il problema in virtualenv è che tutti i sorgenti python sono all'interno dell'ambiente che crei! Quindi non spingerei quei file a un controllo della versione del codice sorgente! La soluzione migliore era la n.4, perché era esattamente ciò di cui avevo bisogno, Vagrant usa Chef per configurare il tuo ambiente, quindi devi solo scrivere alcune ricette e lasciare che vagrant le esegua per te! Quindi invii quelle ricette a SCM, quindi quando la prossima persona riceve i file da SCM e ricarica la VM tutte le dipendenze verranno installate automaticamente!

Ho un post sul blog che spiega di più sull'argomento e ho creato un progetto Django Blank in GitHub in modo che tu possa ottenerlo per avere un punto di partenza del tuo progetto usando vagrant.

http://arthurnn.com/blog/2011/11/25/easy-django-quickstart/ (link non più attivo, quindi collegato a Wayback Machine)

MODIFICARE

Anche la soluzione di Chris Pratt è buona, tuttavia alcune librerie non sono così semplici da installare in tutti i sistemi operativi, ad esempio, molte persone su Mac hanno problemi quando vogliono installare MySQLdb-python. che è una libreria molto comune, ma se tutti nel tuo team devono dedicare del tempo a risolvere questi problemi, non va bene per niente!


MySQLdb-pythonQuesto è davvero un buon motivo per utilizzare un ambiente completo, ma non può essere realizzato anche con pip / requirements.txt?
kbuilds
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.