2014-04-03 12 views
8

I utilizza autoenv per l'attivazione automatica virtualenv. cartella principale del progetto Python ha .env di file con i seguenti contenutiautoenv eseguito anche nella sottocartella

source venv/bin/activate 

Questo comando eseguito ogni volta che cd a qualsiasi sottocartella del progetto. Poi getta

-bash: venv/bin/activate: No such file or directory 

E 'fallito perché sta cercando di eseguire activate relativo alla cartella secondaria. Perché viene eseguito anche in sottocartelle? Come risolvere il problema?

risposta

6

Aveva questo problema oggi. La risposta attuale non affronta il fatto che l'ambiente viene attivato ogni volta che si cd in una sottocartella o si torna alla cartella principale. Risolto con il seguente .env script:

venv=venv 
currentvenv="" 

if [[ $VIRTUAL_ENV != "" ]] 
then 
    # Strip out the path and just leave the env name 
    currentvenv="${VIRTUAL_ENV##*/}" 
fi 

if [[ "$currentvenv" != "$venv" ]] 
then 
    echo "Switching to environment: $venv" 
    workon $venv 
#else 
# echo "Already on environment $venv" 
fi 

Sostituire venv con il nome del vostro ambiente. Puoi rimuovere il commento dal blocco else per vedere che non tenta di attivare l'ambiente ogni volta, dato che l'ambiente desiderato è già attivato.

Nota: se non si utilizza virtualenvwrapper, è necessario sostituire il comando workon con qualsiasi comando che si sta utilizzando per attivare l'ambiente virtuale. Raccomando comunque di usare virtualenvwrapper.

0

Nella tua radice spazio di lavoro, un .env contenente:

test (command -v deactivate) && deactivate 

e in ciascuno dei vostri importanti cartelle di progetto:

workon venv_of_project 

Come this person points out, significa che cd ing intorno in un progetto trasformerà il spazio di lavoro acceso e spento, ma almeno è semplice e molto chiaro cosa sta succedendo.