15. February 2017
Python | Arbeiten mir virtuellen Umgebungen
Allgemein
Virtuelle Umgebung stellen eigenständige Umgebungen dar, in denen Programme und Pakete installiert/modifiziert werden können ohne die Betriebssystemumgebung zu verändern.
Dadurch können zum Beispiel andere Versionen von Python oder von Python-Modulen getestet werden.
Technisch gesehen ist eine virtuelle Umgebung ein Verzeichnis, in dem die gewünschten Pakete und Programme bzw. die gewünschte Python-Version installiert ist. Entsprechend werden die notwendigen Umgebungsvariablen modifiziert: PATH, PYTHONLIB, …
Arbeiten mit einer virtuellen Umgebung
- Virtuelle Umgebung einrichten/installieren (einmalig)
- Virtuelle Umgebung aktivieren
- „Arbeiten“ in der Umgebung, z. B ein Python-Programm ausführen
- Virtuelle Umgebung deaktivieren
Einrichten einer virtuellen Umgebung
Zur Unterstützung von virtuellen Umgebungen gibt es mehrere Programme/Pakete
- venv
- poetry
- pyenv
- virtualenv
venv
Installation
Einrichten einer virtuellen Umgebung
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">➜ python -m venv .venv
➜ pip -V
pip 21.2.4 from D:\python\venv\lib\site-packages\pip (python 3.9)
➜ & .\.venv\Scripts\Activate.ps1
➜ pip -V
pip 21.1.3 from d:\venv\.venv\lib\site-packages\pip (python 3.9)
poetry
Installation
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ pip install poetry
Einrichten einer virtuellen Umgebung
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ poetry new app
Created package app in app
$ cd app
$ tree .
.
├── README.rst
├── app
│ └── __init__.py
├── pyproject.toml
└── tests
├── __init__.py
└── test_app.py
2 directories, 5 files
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ poetry config virtualenvs.create true --local
$ poetry config virtualenvs.in-project true --local
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="6" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ tree .
.
├── README.rst
├── app
│ └── __init__.py
├── poetry.toml
├── pyproject.toml
└── tests
├── __init__.py
└── test_app.py
2 directories, 6 files
Inhalt der Projektdatei poetry.toml
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">[virtualenvs]
create = true
in-project = true
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">➜ poetry install
Updating dependencies
Resolving dependencies...
Writing lock file
Package operations: 10 installs, 0 updates, 0 removals
• Installing pyparsing (2.4.7)
• Installing atomicwrites (1.4.0)
• Installing attrs (21.2.0)
• Installing colorama (0.4.4)
• Installing more-itertools (8.8.0)
• Installing packaging (21.0)
• Installing pluggy (0.13.1)
• Installing py (1.10.0)
• Installing wcwidth (0.2.5)
• Installing pytest (5.4.3)
Installing the current project: app (0.1.0)
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ tree .
.
├── README.rst
├── app
│ └── __init__.py
├── poetry.lock
├── poetry.toml
├── pyproject.toml
└── tests
├── __init__.py
└── test_app.py
virtualenv
Installation
Installation des Paketes pyenv
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ brew install pyenv-virtualenv
Anpassen der Bash Startdatei .bashrc
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title=""> if which pyenv-virtualenv-init > /dev/null; then
eval "$(pyenv virtualenv-init -)"
fi
Virtuelle Umgebung einrichten
Auflisten aller zur Verfügung stehenden Python Versionsn
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ pyenv install --list
Installation einer Python Version
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">pyenv install 3.7.2
Auflisten aller installierten Versionen
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ pyenv versions
* system (set by /Users/<your username>/.pyenv/version)
2.7.14
3.7.1
3.7.2
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title=""># Python 2
$ pyenv virtualenv 2.7.14 venv
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title=""># Python 3
$ pyenv virtualenv 3.7.2 venv
Umgebungen anzeigen: die letzen beiden Zeilen zeigen die soeben eingerichtete Umgebung an
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ pyenv versions
* system (set by /Users/RalphG/.pyenv/version)
2.7.14
3.7.1
3.7.2
3.7.2/envs/venv
venv
Alternativ: nur die virtuellen Umgebungen anzeigen
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ pyenv virtualenvs
Umgebung aktivieren / deaktivieren
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ pyenv activate <name>
$ pyenv deactivate
Umgebung testen
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ which python
~/pkg.virtualenv/bin/python
Das Paket virtualenv
Installation
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ pip install virtualenv
Erstellen einer virtuellen Umgebung
Feststellen des Pfades der gewünschten Python Version
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ which python2
/usr/local/bin/python2
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ which python3
/usr/local/bin/python3
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ virtualenv venv2 --python /usr/local/bin/python2
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ virtualenv venv3 --python /usr/local/bin/python3