2014-04-03 9 views
8

Ich verwende autoenv für automatische virtualenv aktivieren. Python-Projektes oberste Ordner haben .env Datei mit folgendem Inhaltautoenv führt auch in Unterordner

source venv/bin/activate 

Dieser Befehl ausgeführt, wenn cd ein Unterverzeichnis des Projektes. Dann wirft

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

Es ist fehlgeschlagen, weil es versucht, activate relativ zum Unterverzeichnis auszuführen. Warum wird es sogar im Unterordner ausgeführt? Wie behebe ich das Problem?

Antwort

6

Hatte dieses Problem heute. Die aktuelle Antwort behandelt nicht die Tatsache, dass die Umgebung jedes Mal aktiviert wird, wenn Sie cd in einen Unterordner oder zurück in den Stammordner. Gelöst wird sie mit folgendem .env Skript:

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 

ersetzen venv mit dem Namen Ihrer Umgebung. Sie können den else-Block auskommentieren, um zu sehen, dass er nicht jedes Mal versucht, die Umgebung zu aktivieren, da die gewünschte Umgebung bereits aktiviert ist.

Hinweis: Wenn Sie nicht virtualenvwrapper verwenden, sollten Sie den Befehl workon durch den Befehl ersetzen, den Sie zum Aktivieren Ihrer virtuellen Umgebung verwenden. Ich empfehle jedoch, virtualenvwrapper zu verwenden.

0

In Ihrem Arbeitsbereich Wurzel, ein .env enthält:

test (command -v deactivate) && deactivate 

und in jedem Ihrer jeweiligen Projektordner:

workon venv_of_project 

Als this person points out, es bedeutet, dass cd um das wird sich in einem Projekt ing Arbeitsbereich ein und aus, aber zumindest ist es einfach und sehr klar, was vor sich geht.