venv - Crea Ambienti Virtuali
Scopo: Crea contesti isolati di installazione ed esecuzione.
Gli ambienti virtuali Python, gestiti da venv, sono impostati per installare pacchetti ed eseguire programmi in modo tale da isolarli dagli altri pacchetti installati nel resto del sistema. Poichè ciascun ambiente ha il suo proprio interprete eseguibile e le sua proprie directory per l'installazione dei pacchetti, è facile creare ambienti configurati con varie combinazioni di versioni di Python e di pacchetti sullo stesso computer.
Create Ambienti
L'interfaccia primaria da riga di comando per venv conta sulla capacità di Python di eseguire la funzione "main" di un modulo usando l'opzione -m
.
$ python3 -m venv /tmp/demovenv
Potrebbe essere installata una applicazione da riga di comando: pyvenv
, a seconda di come l'interprete Python è stato compilato e distribuito. Il comando seguente ha lo stesso effetto di quello dell'esempio precedente.
$ pyvenv /tmp/demovenv
E' preferibile usare la prima versione poichè è richiesta esplicitamente la selezione di un interprete Python, in modo che non ci sia confusione circa il numero di versione o il percorso di importazione associato al risultante ambiente virtuale.
Contenuti di un Ambiente Virtuale
Ciascun ambiente virtuale contiene una directory bin
, dove sono installati l'interprete locale e qualsiasi script eseguibile, una directory include
per i file collegati alla costruzione di estensioni C, e una directory lib
, con una locazione site-packages
separata per l'installazione dei pacchetti.
$ ls -F /tmp/demoenv bin/ include/ lib/ pyvenv.cfg
La directory bin
predefinita contiene script di "attivazione" per parecchie varianti di shell Unix. Essi possono essere usati per installare l'ambiente virtuale nel percorso di ricerca della shell per assicurarsi che la stessa faccia riferimento ai programmi installati nell'ambiente. Non è necessario attivare un ambiente per utilizzare i programmi in esso installati ma può essere più conveniente.
$ ls -F /tmp/demoenv/bin activate activate.csh activate.fish easy_install* easy_install-3.5* pip* pip3* pip3.5* python@ python3@
Sulle piattaforme che li supportano, vengono usati link simbolici invece che copiare gli eseguibili come l'interprete Python. In questo ambiente, pip
viene installato come copia locale, ma l'interprete è un link simbolico.
In ultimo, l'ambiente include un file pyvenv.cfg
con le impostazioni che descrivono come è configurato l'ambiente e come dovrebbe comportarsi. La variabile home
punta alla locazione dell'interprete Python dove venv
è stato eseguito per creare l'ambiente. include-system-site-packages
è un valore booleano che indica se i pacchetti installati al di fuori dell'ambiente virtuale, a livello di sistema, debbano essere visibili all'interno dell'ambiente virtuale. version
è la versione Python usata per creare l'ambiente.
$ cat /tmp/demovenv/pyvenv.cfg home = /usr/bin include-system-site-packages = false version = 3.5.2
Un ambiente virtuale è più utile con strumenti come pip
o setuptools
sono a disponibili per installare altri pacchetti, quindi pyvenv
li installa nella modalità predefinita. Per creare un ambiente senza questi strumenti, si passi l'opzione --without-pip
alla riga di comando.
Usare Ambienti Virtuali
Gli ambienti virtuali sono comunemente usati per eseguire versioni diverse di programmi oppure per verificare una data versione di un programma con versioni diverse delle sue dipendenze. Ad esempio prima di eseguire un upgrade da una versione di Sphinx a un'altra, è utile verificare i file di documentazione in input usando sia la vecchia che la nuova versione.
$ python3 -m venv /tmp/sphinx1 $ python3 -m venv /tmp/sphinx2
Poi installare la versione degli strumenti da verificare.
$ /tmp/sphinx1/bin/pip install Sphinx==1.3.6 Collecting Sphinx==1.3.6 Using cached Sphinx-1.3.6-py2.py3-none-any.whl Collecting Jinja2>=2.3 (from Sphinx==1.3.6) Using cached Jinja2-2.8-py2.py3-none-any.whl Collecting Pygments>=2.0 (from Sphinx==1.3.6) Using cached Pygments-2.1.3-py2.py3-none-any.whl Collecting babel!=2.0,>=1.3 (from Sphinx==1.3.6) Using cached Babel-2.3.4-py2.py3-none-any.whl Collecting snowballstemmer>=1.1 (from Sphinx==1.3.6) Using cached snowballstemmer-1.2.1-py2.py3-none-any.whl Collecting alabaster<0.8,>=0.7 (from Sphinx==1.3.6) Using cached alabaster-0.7.9-py2.py3-none-any.whl Collecting six>=1.4 (from Sphinx==1.3.6) Using cached six-1.10.0-py2.py3-none-any.whl Collecting sphinx-rtd-theme<2.0,>=0.1 (from Sphinx==1.3.6) Using cached sphinx_rtd_theme-0.1.9-py3-none-any.whl Collecting docutils>=0.11 (from Sphinx==1.3.6) Using cached docutils-0.13.1-py3-none-any.whl Collecting MarkupSafe (from Jinja2>=2.3->Sphinx==1.3.6) Collecting pytz>=0a (from babel!=2.0,>=1.3->Sphinx==1.3.6) Using cached pytz-2016.10-py2.py3-none-any.whl Installing collected packages: MarkupSafe, Jinja2, Pygments, pytz, babel, snowballstemmer, alabaster, six, sphinx-rtd-theme, docutils, Sphinx Successfully installed Jinja2-2.8 MarkupSafe-0.23 Pygments-2.1.3 Sphinx-1.3.6 alabaster-0.7.9 babel-2.3.4 docutils-0.13.1 pytz-2016.10 six-1.10.0 snowballstemmer-1.2.1 sphinx-rtd- theme-0.1.9 $ /tmp/sphinx2/bin/pip install Sphinx==1.4.4 Collecting Sphinx==1.4.4 Using cached Sphinx-1.4.4-py2.py3-none-any.whl Collecting Jinja2>=2.3 (from Sphinx==1.4.4) Using cached Jinja2-2.8-py2.py3-none-any.whl Collecting imagesize (from Sphinx==1.4.4) Using cached imagesize-0.7.1-py2.py3-none-any.whl Collecting Pygments>=2.0 (from Sphinx==1.4.4) Using cached Pygments-2.1.3-py2.py3-none-any.whl Collecting babel!=2.0,>=1.3 (from Sphinx==1.4.4) Using cached Babel-2.3.4-py2.py3-none-any.whl Collecting snowballstemmer>=1.1 (from Sphinx==1.4.4) Using cached snowballstemmer-1.2.1-py2.py3-none-any.whl Collecting alabaster<0.8,>=0.7 (from Sphinx==1.4.4) Using cached alabaster-0.7.9-py2.py3-none-any.whl Collecting six>=1.4 (from Sphinx==1.4.4) Using cached six-1.10.0-py2.py3-none-any.whl Collecting docutils>=0.11 (from Sphinx==1.4.4) Using cached docutils-0.13.1-py3-none-any.whl Collecting MarkupSafe (from Jinja2>=2.3->Sphinx==1.4.4) Collecting pytz>=0a (from babel!=2.0,>=1.3->Sphinx==1.4.4) Using cached pytz-2016.10-py2.py3-none-any.whl Installing collected packages: MarkupSafe, Jinja2, imagesize, Pygments, pytz, babel, snowballstemmer, alabaster, six, docutils, Sphinx Successfully installed Jinja2-2.8 MarkupSafe-0.23 Pygments-2.1.3 Sphinx-1.4.4 alabaster-0.7.9 babel-2.3.4 docutils-0.13.1 imagesize-0.7.1 pytz-2016.10 six-1.10.0 snowballstemmer-1.2.1
In questo modo è possibile eseguire diverse versioni di Sphinx separatamente da ciascun ambiente virtuale, per verificarle con gli stessi file in input.
$ /tmp/sphinx1/bin/sphinx-build --version Sphinx (sphinx-build) 1.3.6 $ /tmp/sphinx2/bin/sphinx-build --version Sphinx (sphinx-build) 1.4.4
Vedere anche:
- venv
- La documentazione della libreria standard per questo modulo.
- PEP 405
- Ambienti Virtuali Python
- virtualenv
- Una versione di ambienti virtuali Python che funziona per Python 2 e 3.
- virtualenvwrapper
- un insieme di wrapper di shell per virtualenv per facilitare la gestione di un gran numero di ambienti.
- Sphinx
- Uno strumento per convertire file in input in formato reStructuredText in HTML, LaTex e altri formati per l'utilizzo.