Mi piacerebbe avere un diverso PYTHONPATH dal mio solito in un particolare virtualenv. Come si imposta automaticamente? Mi rendo conto che è possibile hackerare il file bin/activate
, c'è un modo migliore/più standard?Posso cambiare automaticamente il mio PYTHONPATH quando si attiva/disattiva una virtualenv?
13
A
risposta
19
Questo django-users post probabilmente ti aiuterà molto. Suggerisce di utilizzare virtualenvwrapper per eseguire il wrapping di virtualenv, per utilizzare il comando add2virtualenv. Usando questo, quando l'ambiente è attiva, si può chiamare:
add2virtualenv directory1 directory2 ...
per aggiungere le directory al vostro PYTHONPATH per l'ambiente corrente.
Gestisce autonomamente le modifiche PATH sugli switch di ambiente. Non è richiesta alcuna magia nera. Et voilà!
2
Questa è la versione compromessa di bin/activate
come riferimento. Imposta correttamente PYTHONPATH, ma la disattivazione non funziona.
# 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
Problemi correlati
- 1. Posso cambiare il titolo del mio FolderBrowserDialog?
- 2. Perché virtualenv non imposta il mio terminale?
- 3. virtualenv non crea pacchetti PYTHONPATH/pip installati non funzionano
- 4. Come aggiungere un percorso a PYTHONPATH in virtualenv
- 5. Come aggiungere il mio modulo di TRAVIS-ci PYTHONPATH
- 6. Quando si verifica automaticamente il boxing automatico?
- 7. cambiare la cartella virtualenv su windows
- 8. Posso cambiare default_socket_timeout dal mio codice php?
- 9. Come posso modificare PYTHONPATH su un Mac?
- 10. Posso cambiare il valore dell'oggetto String passato al mio metodo?
- 11. Come posso rendere apt-get install al mio virtualenv?
- 12. Il mio ambiente virtuale (python) causa la rottura del mio PYTHONPATH?
- 13. Come cambiare il colore di UITableViewCell quando si seleziona?
- 14. PYTHONPATH vs. sys.path
- 15. Posso spostare un virtualenv?
- 16. Dove si trova il PYTHONPATH in primo luogo?
- 17. Come posso cambiare il mio ambiente di sviluppo in una lingua diversa in Visual Studio?
- 18. Come evitare "Autorizzazione negata" quando si utilizza pip con virtualenv
- 19. Sublime Text 2 & PYTHONPATH
- 20. errore di Bad interprete quando si imposta virtualenv per Python
- 21. Come cambiare il mio codice da una .Live() per .On()
- 22. Come posso impostare correttamente DJANGO_SETTINGS_MODULE per il mio progetto Django (sto usando virtualenv)?
- 23. Come posso "ripulire" un virtualenv?
- 24. PYTHONPATH ignorato
- 25. Avvia MIDlet automaticamente quando il dispositivo si riavvia?
- 26. Posso cambiare il layout della pagina quando uso window.print()?
- 27. Posso avviare automaticamente un'attività quando viene aperta una cartella?
- 28. Dove dovrebbe WSGIPythonPath puntare nel mio virtualenv?
- 29. Come si usa pytest con virtualenv?
- 30. L'identificatoreForVendor può cambiare quando si aggiorna un'app?
Ora ci sto provando e probabilmente accetterò tra un paio di giorni se non ci sono altre soluzioni che non dipendono da pacchetti aggiuntivi. – saffsd
Vale la pena notare che è possibile automatizzarlo modificando lo script 'postactivate' nella cartella del progetto virtualenvwrapper. Di default questo si trova in '~/.virtualenvs/myproject/bin/postactivate' dove" myproject "è il nome del tuo ambiente virtuale. –