Seite 1 von 1
virtualenv unterschiedliche pythonversionen
Verfasst: Samstag 14. November 2020, 08:53
von basti2s
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:
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
oder
die Pythonversion abfrage zeigt er mir beide male Python 3.7.3 an.
Soweit so gut.
wenn ich jedoch mit:
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
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.
Re: virtualenv unterschiedliche pythonversionen
Verfasst: Samstag 14. November 2020, 09:40
von __deets__
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.
Re: virtualenv unterschiedliche pythonversionen
Verfasst: Samstag 14. November 2020, 11:31
von sparrow
Und was Python 2 angeht: Das ist tot. Es wird nicht mehr entwickelt und bekommt auch keine Sicherheitspatches mehr.
Re: virtualenv unterschiedliche pythonversionen
Verfasst: Montag 16. November 2020, 07:16
von basti2s
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?
Re: virtualenv unterschiedliche pythonversionen
Verfasst: Montag 16. November 2020, 09:46
von __deets__
Ja.
Re: virtualenv unterschiedliche pythonversionen
Verfasst: Montag 16. November 2020, 13:53
von DeaD_EyE
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!)
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.
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.
Re: virtualenv unterschiedliche pythonversionen
Verfasst: Montag 16. November 2020, 15:36
von basti2s
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!)
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.
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?
Re: virtualenv unterschiedliche pythonversionen
Verfasst: Montag 16. November 2020, 16:00
von DeaD_EyE
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.
Re: virtualenv unterschiedliche pythonversionen
Verfasst: Dienstag 17. November 2020, 09:35
von noisefloor
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
Re: virtualenv unterschiedliche pythonversionen
Verfasst: Dienstag 17. November 2020, 10:29
von DeaD_EyE
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.