Virtual Environments
Mit der Funktion des Venv (Virtual Environments) wird projektbezogen eine eigene - und damit unabhängig von der Basis-Installation) eine eigene Python-Umgebung erzeugt.
Vorbereitung Linux
Python ist bei den gängigen Linux-Distributionen bereits installiert. Der folgende Aufruf testet das Vorhandensein von pip:
python3.13 -m pip list
Ausgabe:
Package Version
------- -------
pip 24.3.1
Ansonsten:
sudo apt-get install python3-pip
Es sollte das Projekt MyProj erzeugt und bearbeitet werden.
Variante: zu Fuss
-
Erzeugen eines Projektverzeichnisses:
mkdir z:/py/MyProj
cd py\MyProj`
-
Generieren des Venv:
py -m venv .venv
python3.13 -m venv .venv
-
Aktivieren des Venv
.venv\Scripts\activate.bat
bash /home/pi/py/.venv/bin/activate
-
Test des Venv
Ausgabe:pip list
Package Version ------- ------- pip 23.3.1
- Installation eines Package:
Ausgabe:pip install numpy
Collecting numpy Downloading numpy-1.26.2-cp312-cp312-win_amd64.whl.metadata (61 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.2/61.2 kB 1.6 MB/s eta 0:00:00 Downloading numpy-1.26.2-cp312-cp312-win_amd64.whl (15.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.5/15.5 MB 29.7 MB/s eta 0:00:00 Installing collected packages: numpy Successfully installed numpy-1.26.2 (.venv) Z:\py\MyProj>pip list Package Version ------- ------- numpy 1.26.2 pip 23.3.1
Info
mehr zu pip
Variante: VS-Code
Es wird ein Projektordner angelegt und mit Ctrl+K+O ausgewählt. Mit der Taste Ctrl+Shift+P wird der Befehl "Python: Umgebung erstellen..." ausgewählt
Sobald ein Python-File gestartet werden soll, aktiviert VS-Code das Venv automatisch!
Linux-Service anlegen
Für den Start eines Linux-Service muss anstatt dem globalen Python-Interpreter der Interpreter des Venv /home/myuser/py/gw08a/.venv/bin/python
aufgerufen werden.
[Unit]
Description=GateWay service
After=network.target
[Service]
ExecStart=/home/myuser/py/gw08a/.venv/bin/python -u gateW.py
WorkingDirectory=/home/myuser/py/gw08a
StandardOutput=inherit
StandardError=inherit
Restart=always
User=myuser
[Install]
WantedBy=multi-user.target