Bericht: pyenv - Umschalten zwischen verschiedenen (auch neuen) Python-Versionen unter Leap

  • Hallo,


    ich bin mir nicht sicher, wo ich den Beitrag am besten posten soll. Unter Leap hatte ich in den letzten Monaten gelegentlich das Problem, dass ich Python-Programme testen wollte, aber die Python-Version von Leap zu alt war. Ich habe dann herausgefunden, dass es mit pyenv ein Tool gibt, womit man verschiedene Python-Versionen auf dem System einrichten und zwischen ihnen frei wechseln kann.


    Ich bin so vorgegangen,

    1. dass ich pyenv zunächst über die Softwareverwaltung/Zypper installiert habe. Irgendwas ging dabei nicht richtig. Ich habe dann das Verzeichnis ~/.pyenv gelöscht und bin nach der manuellen Installationsanleitung auf https://github.com/pyenv/pyenv#installation vorgegangen:


    Code
    git clone https://github.com/pyenv/pyenv.git ~/.pyenv

    (... wobei ich da wieder ein http/https-Problem hatte und es am Ende mit http funktioniert hat)


    Code
    cd ~/.pyenv && src/configure && make -C src



    2. um später Python-Umgebungen einzurichten, müssen leider noch weitere Pakete in zypper nachinstalliert werden. Hier wurden leider keine Abhängigkeiten definiert. Bei mir war es:

    -libopenssl-*-devel (passend zur installierten libopenssl - ohne bricht später die Installation anderer Versionen ab)

    -sqlite3 und sqlite3-devel (ohne gibt es später eine Warnung)

    -python-tk

    -tk-devel

    -tcl-devel

    -python3-virtualenv


    (weitere Abhängigkeiten sind laut der Projektseite

    Code
    zypper install gcc automake bzip2 libbz2-devel xz xz-devel openssl-devel ncurses-devel \
    readline-devel zlib-devel tk-devel libffi-devel sqlite3-devel gdbm-devel make findutils patch

    aber anscheinend war davon schon einiges bei mir installiert oder kam mit dem pyenv-Paket...)



    3. anschließend muss ~/.bashrc und ~/.profile ergänzt werden:


    Code
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
    echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
    echo 'eval "$(pyenv init -)"' >> ~/.bashrc
    
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
    echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
    echo 'eval "$(pyenv init -)"' >> ~/.profile


    Ich hoffe, dass ich nichts vergessen habe...


    Code
    exec "$SHELL"

    liest die geänderte bash-Konfiguration neu ein.


    II. Benutzung:


    1.

    Code
    pyenv versions

    Listet installierte Umgebungen


    2.

    Code
    pyenv version

    listet aktuell von pyenv aktivierte Python-Version


    3.

    Code
    python --version

    der endgültige Test: welche Version liefert die Python-Umgebung zurück?


    4.

    Code
    pyenv install 3.9.1

    installiert die Umgebung Python 3.9.1


    5.

    Code
    pyenv local 3.9.1
    pyenv global 3.9.1

    aktiviert Version 3.9.1 als lokale / globale Umgebung. Den genauen Unterschied habe ich noch nicht verstanden. Mir scheint bisher local für meine Zwecke zu reichen. :/ Überprüfung mit pyenv versions (Markierung durch Stern) oder python --version.


    6.

    Code
    pyenv init

    soll die Shell-Anmeldung anstelle der obigen manuellen .bashrc erledigen, habe ich aber noch nicht getestet.


    Jedenfalls finde ich das Tool sehr nützlich. :) Man kann sich beliebige Python-Umgebungen ziehen und das System zwischen ihnen umschalten. Gerade bei Leap ist Python ja immer ein gewisses Thema... Ich muss mich aber noch genauer damit befassen, was es mit local/global und virtuellen Python-Umgebungen auf sich hat. Interessant ist auch, dass nach einem Distributionsupgrade von Leap 15.4 auf 15.5 die Shell-Einbindung weg war. Heisst das, zypper dup überschreibt .bashrc und .profile der User?


    Plugins:

    pyenv unterstützt Plugins, welche auf der Projektseite angeboten werden. Sie werden in .pyenv/plugins in Unterverzeichnissen installiert. Ich habe sie einfach über die git clone-Aufrufe auf den jeweiligen Plugin-Webseiten des pyenv-Projekts auf github installiert, also z.B.


    Code
    git clone https://github.com/pyenv/pyenv-update.git $(pyenv root)/plugins/pyenv-update

    Für den Inhalt des Beitrages 308998 haftet ausdrücklich der jeweilige Autor: Spaceloop