Puis-je changer automatiquement mon PYTHONPATH lors de l'activation / désactivation d'un virtualenv?
-
13-09-2019 - |
Question
Je voudrais avoir un autre PYTHONPATH de mon habitude dans un virtualenv particulier. Comment puis-je régler cela automatiquement? Je me rends compte qu'il est possible de pirater le fichier bin/activate
, est-il un moyen de mieux / plus standard?
La solution
django-utilisateurs postent va probablement vous aider lot. Il suggère d'utiliser virtualenvwrapper pour envelopper virtualenv, utiliser le la commande de add2virtualenv. L'utilisation de ce, lorsque l'environnement est actif, vous pouvez simplement appeler:
add2virtualenv directory1 directory2 ...
pour ajouter les répertoires à votre PYTHONPATH pour l'environnement actuel.
Il gère de façon autonome les changements PATH sur les commutateurs de l'environnement. Pas de magie noire nécessaire. Et le tour est joué!
Autres conseils
Voici la version piratée de bin/activate
pour référence. Il définit correctement le PYTHONPATH, mais MHS ne fonctionne pas.
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly
deactivate () {
if [ -n "$_OLD_VIRTUAL_PATH" ] ; then
PATH="$_OLD_VIRTUAL_PATH"
export PATH
unset _OLD_VIRTUAL_PATH
fi
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then
hash -r
fi
if [ -n "$_OLD_VIRTUAL_PS1" ] ; then
PS1="$_OLD_VIRTUAL_PS1"
export PS1
unset _OLD_VIRTUAL_PS1
fi
if [ -n "$_OLD_PYTHONPATH" ] ; then
PYTHONPATH="$_OLD_PYTHONPATH"
export PYTHONPATH
unset _OLD_PYTHONPATH
fi
unset VIRTUAL_ENV
if [ ! "$1" = "nondestructive" ] ; then
# Self destruct!
unset deactivate
fi
}
# unset irrelavent variables
deactivate nondestructive
VIRTUAL_ENV="env_location" # Anonymized
export VIRTUAL_ENV
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
_OLD_VIRTUAL_PS1="$PS1"
if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
# special case for Aspen magic directories
# see http://www.zetadev.com/software/aspen/
PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1"
else
PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
fi
export PS1
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then
hash -r
fi
_OLD_PYTHONPATH="$PYTHONPATH"
PYTHONPATH="new_pythonpath" #Anonymized
export PYTHONPATH