virtualenv unterschiedliche pythonversionen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
basti2s
User
Beiträge: 29
Registriert: Samstag 14. November 2020, 08:36

Hallo miteinander,

ich möchte auf meinem RaspberryPi ein bisschen mit Python und den GPIOs rumspielen. Dazu habe ich mir sagen lassen, dass es generell für größere Projekte schlau ist so virtuelle Umgebungen zu verwenden.
Also habe ich mir Virtualenv installiert und virtuelle Umgebungen eingerichtet. Jedoch habe ich diesbezüglich noch eine grundsätzliche Frage, die ich so im Internet nicht klären konnte.

wenn ich mit:

Code: Alles auswählen

virtualenv forum1 -p python 3
eine Virtuelle Umgebung anlege zeigt er mir an, dass er eine Virtuelle Umgebung mit "CPython 3.7.3.final.0-32" erstellt hat.
Wenn ich dann in der virtuellen Umgebung mit

Code: Alles auswählen

python --version
oder

Code: Alles auswählen

python3 --version
die Pythonversion abfrage zeigt er mir beide male Python 3.7.3 an.
Soweit so gut.

wenn ich jedoch mit:

Code: Alles auswählen

virtualenv forum3 -p python2
eine neue Virtuelle Umgebung anlege die ja nur mit python2 laufen soll zeigt er mir zunächst an, das er eine Umgebung mit CPython2.7.16.final.0-32 installiert hat.
Frage ich mit

Code: Alles auswählen

python3 --version
die Python3 Version ab müsste ja eigendlich ein fehler kommen, oder zumindest eine Meldung dass kein Python3 installiert ist. Oder?
Es wird mir aber angezeigt, dass Python 3.7.3 installiert ist.

Ich hoffe ich habe euch mein Problem gut geschildert, falls nicht einfach nachfragen. Kann gut sein, dass ich da etwas grundlegendes nicht richtig verstanden habe.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du irrst. Genauso wenig,wie alle anderen Unix Kommandos, verschwindet python3 nicht aus der Liste der im Pfad erreichbaren, und damit aufrufbaren, Programme.

Und die Gegenprobe würde im übrigen auch in die Hose gehen. Bei aktiviertem Python 3 venv ist python2 immer noch Python 2.

Lediglich python und das relevante python2/3 werden umgebogen.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Und was Python 2 angeht: Das ist tot. Es wird nicht mehr entwickelt und bekommt auch keine Sicherheitspatches mehr.
basti2s
User
Beiträge: 29
Registriert: Samstag 14. November 2020, 08:36

okay, also ich habe das ganze jetzt mal so verstanden.
In der Virtuellen Umgebung erstelle ich eine Umgebung mit einer beliebigen Pythonversion. Wenn ich in dieser ein Script ausführe, wird dieses auch mit der in der Umgebung voreingestellten Python Version ausgeführt.
Ich kann aber trotzdem alle anderen Pythonversionen sehen?

Habe ich das richtig verstanden?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1239
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

https://github.com/pyenv/pyenv-installer

Abhängigkeiten zum Kompilieren installieren:

Code: Alles auswählen

sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
pyenv für den User installieren (NICHT ROOT!)

Code: Alles auswählen

curl https://pyenv.run | bash
Das zur ~/.bashrc hinzufügen:

Code: Alles auswählen

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Dann einmal als User neu einloggen, damit das hinzugefügte ausgeführt wird und pyenv aktiv wird (Umgebungsvariablen werden gesetzt).

Code: Alles auswählen

pyenv install 3.9.0
pyenv install 3.8.6
pyenv install 3.7.9
pyenv install 3.6.12
Nach der Installation der Interpreter, kann mittels pyenv shell VERSION der entsprechende Interpreter selektiert werden.

Code: Alles auswählen

pyenv shell 3.9.0
python
Pyenv kann auch virtuelle environments. Ich mache das immer so, dass ich lokal in der Shell die entsprechende Version auswähle (meist das aktuellste) und dann erstelle ich mit venv ein Virtuelles Envorinment.
Wichtig ist, dass virtualenv ein 3rd party Modul ist und venv ist bei Python mit dabei. Das sind zwei unterschiedliche Module. Das Shell-Script pyenv hat auch nochmal ein Modul für virtuelle environments.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
basti2s
User
Beiträge: 29
Registriert: Samstag 14. November 2020, 08:36

DeaD_EyE hat geschrieben: Montag 16. November 2020, 13:53 https://github.com/pyenv/pyenv-installer

Abhängigkeiten zum Kompilieren installieren:

Code: Alles auswählen

sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
pyenv für den User installieren (NICHT ROOT!)

Code: Alles auswählen

curl https://pyenv.run | bash
Das zur ~/.bashrc hinzufügen:

Code: Alles auswählen

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Dann einmal als User neu einloggen, damit das hinzugefügte ausgeführt wird und pyenv aktiv wird (Umgebungsvariablen werden gesetzt).

Code: Alles auswählen

pyenv install 3.9.0
pyenv install 3.8.6
pyenv install 3.7.9
pyenv install 3.6.12
Nach der Installation der Interpreter, kann mittels pyenv shell VERSION der entsprechende Interpreter selektiert werden.

Code: Alles auswählen

pyenv shell 3.9.0
python
Pyenv kann auch virtuelle environments. Ich mache das immer so, dass ich lokal in der Shell die entsprechende Version auswähle (meist das aktuellste) und dann erstelle ich mit venv ein Virtuelles Envorinment.
Wichtig ist, dass virtualenv ein 3rd party Modul ist und venv ist bei Python mit dabei. Das sind zwei unterschiedliche Module. Das Shell-Script pyenv hat auch nochmal ein Modul für virtuelle environments.
Vielen Dank für die Ausführliche Antwort, jedoch verstehe ich nicht ganz was du mir damit sagen möchtest. Meine Frage war doch eigentlich geklärt, oder willst du mir damit sagen, dass dein vorredner nicht ganz richtig lag?
Benutzeravatar
DeaD_EyE
User
Beiträge: 1239
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Die Vorredner haben alle recht.

Es ging um die Tatsache, verschiedene Python-Versionen absichtlich nebeneinander zu installieren, die nicht von der Distribution bereitgestellt werden.
Das geht nicht über den Paketmanager der Linux-Distributionen, da diese bei einer Python Version bleiben, bis die nächste Veröffentlichung der Distribution erscheint.
So ist es zumindest bei releasebasierten Linux-Distributionen. Es gibt noch Rolling-Releases wie z.B. Arch Linux oder Gentoo. Da hat man immer das Neuste.
Debian Bullseye contains 2.7, 3.7, 3.8.
Debian Buster contains Python 2.7, 3.7.
Stable ist momentan Debian 10 (Buster), also steht Python 2.7 und 3.7 zur Verfügung, wobei Python 2.7 End of Life ist.
Wenn du jetzt z.B. Python 3.8 oder 3.9 unter Debian Buster installieren willst, ohne das koplette Betriebssystem zu korrumpieren, dann wäre Pyenv die einfachste Wahl.
Wenn du mit dem arbeiten willst, was dir die verwendete Linux-Distribution anbietet, brauchst du Pyenv nicht. In dem Fall wäre es nur Mehraufwand ohne großen Nutzen.

Anders und einfacher ist es unter Windows. Da kann man einfach alle Python-Versionen installieren (so ganz klassisch mit Installer), die die Windows-Version unterstützen.
Python 3.9 kann man z.B. nicht unter Windows 7 installieren, da die Unterstützung beendet ist.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
noisefloor
User
Beiträge: 4191
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Wenn du jetzt z.B. Python 3.8 oder 3.9 unter Debian Buster installieren willst, ohne das koplette Betriebssystem zu korrumpieren,...
Das stimmt so nicht ganz. Du kannst auch außerhalb der Paketquellen mehrere Python-Version konfliktfrei parallel installieren, indem du selber kompilierst (was innerhalb pyenv ja wohl auch so läuft). Wichtig ist, dass du unter Debian / Ubuntu `make altinstall` aufrufst und _nicht_ `make install`, dann funktioniert das.

Gruß, noisefloor
Benutzeravatar
DeaD_EyE
User
Beiträge: 1239
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

noisefloor hat geschrieben: Dienstag 17. November 2020, 09:35 Das stimmt so nicht ganz. Du kannst auch außerhalb der Paketquellen mehrere Python-Version konfliktfrei parallel installieren, indem du selber kompilierst (was innerhalb pyenv ja wohl auch so läuft). Wichtig ist, dass du unter Debian / Ubuntu `make altinstall` aufrufst und _nicht_ `make install`, dann funktioniert das.
Ja, das geht auch. Es ist aber weniger Anfängergeeignet. Pyenv macht alles das, was man normalerweise manuell erledigen muss.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten