Consiglio vivamente di evitare pip3
di installare cose nei pacchetti del sito di sistema. Ho già discusso questi argomenti ma ti darò le note:
- Gli aggiornamenti di sistema rompono tutto
- L'installazione di pacchetti apt può sovrascrivere cose installate su pip
- Conflitti di versione
- Gli aggiornamenti della distribuzione sono un caos imprevedibile . Sul serio. Ho perso i capelli a questi.
Consiglio vivamente di utilizzare virtualenv
. È una vera seccatura ovunque tu vada, ma una volta che lo hai impostato hai un ambiente Python completo sotto il tuo completo controllo. Questo significa più lavoro (dovrai controllare le cose per gli aggiornamenti e pip
non ci aiuta ancora davvero) ma non devi preoccuparti di ciò che Ubuntu sta facendo.
Ho un ambiente per ogni sito (semplicemente seduto in una sottodirectory chiamata venv
). Alcune persone, incluso me una volta, preferiscono condividere i loro ambienti tra più siti. Ho trovato questo più facile da mantenere in termini di rilascio di aggiornamenti, ma alcuni siti possono essere fragili o richiedere versioni precedenti e trattenere l'intero ambiente. YMMV.
In termini di installazione di questo, e solo per schiaffeggiarmi in faccia, virtualenv
non è ancora impacchettato per Python 3, quindi dobbiamo usare pip3
:
$ sudo pip3 install virtualenv
...
$ virtualenv-3.3 myenv
Using base prefix '/usr'
New python executable in myenv/bin/python3
Also creating executable in myenv/bin/python
Installing setuptools, pip...done.
$ source myenv/bin/activate # This is important!
Adesso il tuo PS1 bash dovrebbe essere aperto (myenv)
per farti sapere che ti trovi in un ambiente diverso. Possiamo testare l'ambiente per verificare che siamo nelle giuste versioni delle cose (non usando le versioni di sistema per cominciare):
$ python --version
Python 3.3.2+
$ which python pip
/home/oli/Desktop/myenv/bin/python
/home/oli/Desktop/myenv/bin/pip
E poi puoi continuare come se fossi il padrone dell'universo. Non hai più bisogno di root da usare pip
e non devi specificare pip3
. È solo molto più amichevole.
$ pip install django umemcache
...
Se stai usando qualcosa di simile uwsgi
per ospitare questo (dovresti) usa il suo flag -H (o l'argomento home config) per dirlo dove vive l'ambiente Python.
Per semplificare lo sviluppo, puoi "montare" automaticamente il tuo virtualenv
ambiente. Ci sono molti script là fuori, ma questo è mio (questo vive in fondo al mio ~/.bashrc
:
export VENVDIR="/web"
export VENVDIR_VENV="$VENVDIR/venv"
venvcd() {
wd=$(pwd)
[[ $wd == $VENVDIR/* || $wd == $VENVDIR ]] && wasin=true || unset wasin
builtin cd "$@"
wd=$(pwd)
if [[ $wd == $VENVDIR/* || $wd == $VENVDIR ]]; then
source $VENVDIR_VENV/bin/activate
else
[ $wasin ] && deactivate
fi
}
alias cd="venvcd"
cd .
Ogni volta che cd
in /web
(dove tutti i miei siti web di sviluppo sono memorizzati), monta il virtualenv per me. Nota che ho un solo ambiente per tutti i miei siti, quindi questo ti farà solo se fai qualcosa di simile. Esistono molti altri modi per fare cose simili .