Zum Inhalt springen →

Mit dem Virtualenvwrapper Python virtualenv einfacher handhaben

Virtualenvwrapper ist ein Python-Tool, das die Verwaltung von Python-Virtual-Environments erleichtert. Es ermöglicht Benutzern, virtuelle Umgebungen für Python-Projekte zu erstellen, zu verwalten und zu aktivieren. Das Tool baut auf dem Python-Paket virtualenv auf und bietet zusätzliche Funktionen und Komfort für die Arbeit mit virtuellen Umgebungen.

Installation

Zunächst muss das virtualenvwrapper-Tool installiert werden. Dies kann mit dem folgenden Befehl in der Kommandozeile durchgeführt werden:

michael@jetson:~$ pip3 install virtualenvwrapper
Collecting virtualenvwrapper
  Downloading https://files.pythonhosted.org/packages/c1/6b/2f05d73b2d2f2410b48b90d3783a0034c26afa534a4a95ad5f1178d61191/virtualenvwrapper-4.8.4.tar.gz (334kB)
    100% |████████████████████████████████| 337kB 891kB/s
Collecting stevedore (from virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/6d/8d/8dbd1e502e06e58550ed16c879303f83609d52ac31de0cd6a2403186148a/stevedore-3.5.2-py3-none-any.whl (50kB)
    100% |████████████████████████████████| 51kB 1.7MB/s
Collecting virtualenv (from virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/18/a2/7931d40ecb02b5236a34ac53770f2f6931e3082b7a7dafe915d892d749d6/virtualenv-20.17.1-py3-none-any.whl (8.8MB)
    100% |████████████████████████████████| 8.9MB 59kB/s
Collecting virtualenv-clone (from virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/21/ac/e07058dc5a6c1b97f751d24f20d4b0ec14d735d77f4a1f78c471d6d13a43/virtualenv_clone-0.5.7-py3-none-any.whl
Collecting importlib-metadata>=1.7.0; python_version < "3.8" (from stevedore->virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/a0/a1/b153a0a4caf7a7e3f15c2cd56c7702e2cf3d89b1b359d1f1c5e59d68f4ce/importlib_metadata-4.8.3-py3-none-any.whl
Collecting pbr!=2.1.0,>=2.0.0 (from stevedore->virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/01/06/4ab11bf70db5a60689fc521b636849c8593eb67a2c6bdf73a16c72d16a12/pbr-5.11.1-py2.py3-none-any.whl (112kB)
    100% |████████████████████████████████| 122kB 865kB/s
Collecting filelock<4,>=3.4.1 (from virtualenv->virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/84/ce/8916d10ef537f3f3b046843255f9799504aa41862bfa87844b9bdc5361cd/filelock-3.4.1-py3-none-any.whl
Collecting importlib-resources>=5.4; python_version < "3.7" (from virtualenv->virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/24/1b/33e489669a94da3ef4562938cd306e8fa915e13939d7b8277cb5569cb405/importlib_resources-5.4.0-py3-none-any.whl
Collecting platformdirs<3,>=2.4 (from virtualenv->virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/b1/78/dcfd84d3aabd46a9c77260fb47ea5d244806e4daef83aa6fe5d83adb182c/platformdirs-2.4.0-py3-none-any.whl
Collecting distlib<1,>=0.3.6 (from virtualenv->virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/76/cb/6bbd2b10170ed991cf64e8c8b85e01f2fb38f95d1bc77617569e0b0b26ac/distlib-0.3.6-py2.py3-none-any.whl (468kB)
    100% |████████████████████████████████| 471kB 696kB/s
Collecting typing-extensions>=3.6.4; python_version < "3.8" (from importlib-metadata>=1.7.0; python_version < "3.8"->stevedore->virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/45/6b/44f7f8f1e110027cf88956b59f2fad776cca7e1704396d043f89effd3a0e/typing_extensions-4.1.1-py3-none-any.whl
Collecting zipp>=0.5 (from importlib-metadata>=1.7.0; python_version < "3.8"->stevedore->virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/bd/df/d4a4974a3e3957fd1c1fa3082366d7fff6e428ddb55f074bf64876f8e8ad/zipp-3.6.0-py3-none-any.whl
Building wheels for collected packages: virtualenvwrapper
  Running setup.py bdist_wheel for virtualenvwrapper ... done
  Stored in directory: /home/michael/.cache/pip/wheels/70/d7/39/a522e494b0e145a1bec42f45a6e542f097c20d0be3ec26866e
Successfully built virtualenvwrapper
Installing collected packages: typing-extensions, zipp, importlib-metadata, pbr, stevedore, filelock, importlib-resources, platformdirs, distlib, virtualenv, virtualenv-clone, virtualenvwrapper
Successfully installed distlib-0.3.6 filelock-3.4.1 importlib-metadata-4.8.3 importlib-resources-5.4.0 pbr-5.11.1 platformdirs-2.4.0 stevedore-3.5.2 typing-extensions-4.1.1 virtualenv-20.17.1 virtualenv-clone-0.5.7 virtualenvwrapper-4.8.4 zipp-3.6.0

Sobald das Tool installiert ist, können wir beginnen, virtuelle Umgebungen zu erstellen und zu verwalten.

Erstellung einer virtuellen Umgebung

Die Erstellung einer virtuellen Umgebung erfolgt mit dem Befehl „mkvirtualenv“. Der Befehl erstellt eine neue virtuelle Umgebung mit dem angegebenen Namen. Wenn der Name nicht angegeben wird, wird der Name des aktuellen Verzeichnisses als Name der virtuellen Umgebung verwendet.

Normalerweise kann man mit mkvirtualenv myenv eine neue Umgebung anlegen. Leider funktioniert das bei mir natürlich erst mal nicht.

michael@jetson:~$ mkvirtualenv myenv
-bash: mkvirtualenv: command not found

Naja, nach ein wenig googlen habe ich dann herausgefunden, dass meine Intallation nicht ganz optimal gelaufen ist, aber mit den folgenden beiden Kommandos kann man das korrigieren.

michael@jetson:/opt$ VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
michael@jetson:/opt$ source `which virtualenvwrapper.sh`
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/premkproject
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/postmkproject
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/initialize
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/premkvirtualenv
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/postmkvirtualenv
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/prermvirtualenv
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/postrmvirtualenv
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/predeactivate
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/postdeactivate
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/preactivate
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/postactivate
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/get_env_details

Nun kann man wie folgt eine eine neue Umgebung anlegen.

michael@jetson:/opt$ mkvirtualenv myenv
created virtual environment CPython3.6.9.final.0-64 in 1263ms
  creator CPython3Posix(dest=/home/michael/.virtualenvs/myenv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/michael/.local/share/virtualenv)
    added seed packages: pip==21.3.1, setuptools==59.6.0, wheel==0.37.1
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/myenv/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/myenv/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/myenv/bin/preactivate
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/myenv/bin/postactivate
virtualenvwrapper.user_scripts creating /home/michael/.virtualenvs/myenv/bin/get_env_details
(myenv) michael@jetson:/opt$

Der Hinweis (myenv) am Anfang der letzten Zeile zeigt an, dass die virtuelle Python Umgebung aktiv ist.

Aktivierung einer virtuellen Umgebung

Um eine virtuelle Umgebung zu aktivieren, kann der Befehl „workon“ verwenden. Der Befehl akzeptiert den Namen der virtuellen Umgebung als Argument. Wenn der Name nicht angegeben wird, wird eine Liste der verfügbaren virtuellen Umgebungen angezeigt.

michael@jetson:/opt$ workon myenv
(myenv) michael@jetson:/opt$

Schaut man sich nun die TODO an, sieht man sofort, dass der sys.path um die virtuelle Umgebung ergänzt wurde.

(myenv) michael@jetson:~/.virtualenvs/myenv$ python -m site
sys.path = [
    '/home/michael/.virtualenvs/myenv',
    '/usr/lib/python36.zip',
    '/usr/lib/python3.6',
    '/usr/lib/python3.6/lib-dynload',
    '/home/michael/.virtualenvs/myenv/lib/python3.6/site-packages',
]
USER_BASE: '/home/michael/.local' (exists)
USER_SITE: '/home/michael/.local/lib/python3.6/site-packages' (exists)
ENABLE_USER_SITE: False

In der virtuellen Umgebung müssen dann die benötigten Libs installiert werden. Vorher (außerhalb) installierte Bibliotheken sind erst mal nicht verfügbar.

michael@jetson:~$ python
Python 3.6.9 (default, Nov 25 2022, 14:10:45)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch as tr
>>> print (tr.rand(2,2))
tensor([[0.1711, 0.6970],
        [0.6228, 0.2922]])


michael@jetson:~$ workon myenv
(myenv) michael@jetson:~$ python
Python 3.6.9 (default, Nov 25 2022, 14:10:45)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch as tr
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'torch'

Deaktivierung einer virtuellen Umgebung

Um eine virtuelle Umgebung zu deaktivieren, können wir den Befehl „deactivate“ verwenden. Dies bringt uns zurück zur Standard-Python-Umgebung.

(myenv) michael@jetson:/opt$ deactivate
michael@jetson:/opt$

Löschen einer virtuellen Umgebung

Um eine virtuelle Umgebung zu löschen, wird der Befehl „rmvirtualenv“ verwendet. Der Befehl akzeptiert den Namen der virtuellen Umgebung als Argument.

michael@jetson:/opt$ rmvirtualenv myenv
Removing myenv...

Andere Funktionen

Neben den oben genannten Funktionen bietet virtualenvwrapper auch eine Reihe von Funktionen, um das Arbeiten mit virtuellen Umgebungen zu erleichtern. Einige davon sind:

  • lsvirtualenv
    Zeigt eine Liste aller virtuellen Umgebungen an.
  • cdvirtualenv
    Ändert das Verzeichnis zu dem Ort, an dem die angegebene virtuelle Umgebung installiert ist.
  • add2virtualenv
    Fügt einen Pfad zur PYTHONPATH-Umgebungsvariable hinzu, damit Python-Module aus diesem Pfad in der virtuellen Umgebung importiert werden können.

Zusammenfassung

Zusammenfassend ist virtualenvwrapper ein nützliches Tool für Python-Entwickler, um virtuelle Umgebungen zu erstellen und zu verwalten. Es bietet zusätzliche Funktionen und Komfort im Vergleich zum Standard-Tool virtualenv und erleichtert somit die Arbeit an mehreren Python-Projekten gleichzeitig.

Veröffentlicht in Allgemein