2012-09-13 10 views
8

Lavoro principalmente in questi giorni con Python 2.7 e Django 1.3.3 (ospitato su Heroku) e ho diversi progetti che mantengo. Ho lavorato su un desktop con Ubuntu in esecuzione all'interno di una VirtualBox, ma di recente ho dovuto fare un viaggio e volevo che tutto fosse caricato sul mio notebook. Ma, quello che ho scoperto rapidamente è che virtualenv + Github è davvero facile per creare progetti, ma ho faticato a cercare di farli spostare sul mio notebook. L'approccio che mi è venuto in mente è stato creare un nuovo virtualenv e quindi clonare il codice da github. Ma, non ho potuto farlo nella cartella che volevo davvero perché direbbe che la cartella non è vuota. Quindi, vorrei clonarlo in una cartella tmp che non taglia e incolla tutto ciò che volevo. Non TERRIBILE, ma mi sento come se mi mancasse qualcosa qui e che dovrebbe essere più facile. Forse prima clona, ​​poi mkvirtualenv?Migrazione di virtualenv e Github tra computer

Non è un problema di schiacciamento, ma sto pensando di apportare alcune modifiche in più (come ottenere un giro del VirtualBox e andare semplicemente con un sistema Dual Boot) e sarebbe bello se potessi renderlo un po 'più agevole. :)

Infine, ho trovato e letto alcuni post su come spostare repository git tra computer, ma non ho visto alcun problema con Virtualenv (forse l'ho appena perso).

MODIFICA: solo per essere chiari ed evitare confusione, non sto provando a "spostare" il virtualenv. Sto solo parlando del modo migliore per crearne uno nuovo. Installa i pacchetti, quindi clona il repository da github.

+0

"Ma non potevo farlo nella cartella che volevo veramente perché direi che la cartella non è vuota." - Stai facendo virtualenv il tuo repository git? Come in, sono 'bin /' (quello con 'activate') e' .git' nella stessa directory? – delnan

+0

Sì ... .git, bin, requirements.txt sono tutti nello stesso livello. Bin non è controllato nel repository. Poi ho una cartella denominata "src" allo stesso livello e in basso è dove è contenuta la mia fonte. –

risposta

1

La cosa bella di una virtualizzazione è che puoi descrivere come crearne uno e puoi farlo ripetutamente su più piattaforme.

Quindi, invece di clonare il tutto, clonare un metodo per creare il virtualenv in modo coerente, e averlo nel repository git. In questo modo si evitano i nasties specifici della piattaforma.

+0

Interessante ... ma, per favore perdona la mia ignoranza, non sono sicuro di aver capito esattamente. Potresti fornire altri dettagli? O potresti fornire un link? Grazie per la risposta. –

+0

Penso che voglia dire: usare un file requirements.txt e creare uno script di shell che esegua l'ultima parte di [matt b answer] (http://stackoverflow.com/a/12410239/1521064): 'virtualenv' per creare, 'sorgente' da attivare,' pip' da installare. – vault

3

Oltre allo scripting che crea una nuova virtualenv, è necessario creare un file requirements.txt che abbia tutte le dipendenze (ad es. Django1.3), quindi è possibile eseguire pip install -r requirements.txt e questo installerà tutte le dipendenze per l'utente.

Si può anche avere pip creare questo per voi facendo pip freeze > stable-req.txt che stamperà le dipendenze come ci sono nel virtualenv corrente. È quindi possibile mantenere i requisiti.txt sotto il controllo della versione.

+0

Grazie per la risposta. Capisco quella parte. Vorrei sottolineare che può essere un po 'impegnativo con una macchina nuova di zecca perché continuerai a incappare nei problemi con i moduli che devono essere costruiti (come psycopg2, django-pylibmc-sasl). Ma, una volta che hai installato tutti i file "dev", l'installazione dal file requirements.txt è sicuramente la strada da percorrere. –

+0

Ho visto questo che può aiutarti ad aggirare i moduli che devono essere costruiti: http://blip.tv/djangocon/taming-dependencies-with-pip-5582996 vale la pena guardare un orologio – Ctrlspc

+0

@DavidS non puoi installarli dipendenze con pip? Posso trovare entrambi con 'pip search'. Inserirli in 'requirements.txt' significa che è necessario meno lavoro per i nuovi sviluppatori/setup. –

9

Questo perché non si è nemmeno autorizzati a spostare i virtualenv in posizioni diverse su un sistema (c'è il supporto per la rilocazione, ma è sperimentale), per non parlare di un sistema a un altro. Creare un nuovo virtualenv:

  • Installare virtualenv sull'altro sistema
  • Prendi un requirements.txt, o scrivendo una o memorizzando l'uscita di pip freeze (e modificare l'uscita)
  • Spostare il requirements.txt a l'altro sistema, crea una nuova virtualenv e installa le librerie tramite pip install -r requirements.txt.
  • clonare il repository git sull'altro sistema

Per esigenze più avanzate, è possibile creare uno script bootstrap che comprende virtualenv + codice personalizzato per impostare qualsiasi altra cosa.

EDIT: Avere la radice del virtualenv e la radice del repository nella stessa directory mi sembra una cattiva idea. Metti il ​​repository in una directory all'interno della radice virtualenv, o mettili in alberi completamente separati.Non solo eviti git (giustamente - di solito, tutto ciò che non è tracciato da git è un gioco equo da eliminare) lamentando i file esistenti, puoi anche usare virtualenv per più repository ed evitare conflitti di nomi.

+0

Come nota, non mi sto muovendo ... Sto creando una nuova virtualizzazione. Modificherò la domanda originale per renderla più chiara. –

+0

Inoltre ... cosa fai della clonazione? Per me, git si lamenta perché la cartella di destinazione non è vuota. Sembra che la risposta di Matt B lo maneggi, ma non lo fai. O mi sta sfuggendo qualcosa? –

+0

@DavidS in genere si desidera creare un virtualenv * all'interno * di ciascun progetto, ovvero all'interno della directory clonata. In questo modo è possibile avere virtualenv separati, separati per più progetti tutti sullo stesso computer. –

14

L'unico flusso di lavoro dovrebbe essere necessario è:

git clone repo_url somedir 
cd somedir 
virtualenv <name of environment directory> 
source <name of environment directory>/bin/activate 
pip install -r requirements.txt 

Questo presuppone che sia stato eseguito pip freeze > requirements.txt (mentre il venv è attivato) per elencare tutti i virtualenv-pip-installato le librerie e controllato in pronti contro termine.

Problemi correlati