Python Versionen abfragen

Hinweis: In dem Thema Python Versionen abfragen gibt es 6 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Anscheinend installiert sind mit der Standardinstallation von Leap42.2 die Python Versionen 2.7 und 3.4


    Wenn ich aber die Konsole befrage, dann wird nur die 2.7 Version gemeldet:

    Code
    linux-vd4l:~ # python
    Python 2.7.12 (default, Jun 28 2016, 06:57:42) [GCC] on linux2
    Type "help", "copyright", "credits" or "license" for more information.


    Die Zypper Abfrage zeigt:


    Demnach sind die Bibliotheken libpython 2.7 und 3.4 sowie scheinbar auch der andere Kram für beide Forks drin.


    Ach ja, jetzt die Preisfrage: Warum ist das so? Also, warum zeigt die einfache Abfrage mit "python" nicht an, was tatsächlich da ist?

    Für den Inhalt des Beitrages 103746 haftet ausdrücklich der jeweilige Autor: Suse-Paul

  • Python 2.x und Python 3.x sind zwei völlig verschiedene paar Schuhe.
    Und nicht kompatibel zueinander.
    Ein Python 2.x Programm kann man zwar mit Tools auf Python 3.x so halbwegs portieren lassen, bei komplexen Programmen ist das jedoch kein Weg.


    Es sind auf nahezu allen Linuces deshalb beide Versionen installiert.


    Wie in Linux üblich, ist es möglich mehrere Versionen gleichzeit installiert zu haben.
    Dafür gibt es die Familie der alternatives Programme. Zum Einstellen gibt es update-alternatives


    openSUSE geht jedoch bei Python einen komplett eigenen Weg.
    Nämlich keinen. Der alternatives Mechanismus müsste von dir selbst eingerichtet werden,
    was nicht schwer ist - es werden letztlich nur ein paar Links gesetzt.


    Ein file $(which python) zeigt dir schon, dass python nur ein Link auf python2.7 ist.


    Python selbst bringt sogar noch viel bessere Methoden mit, um Programme vollständig zu kapseln.
    Man lese sich dazu in virtualenv ein.


    Wenn man diese paar Grundtatsachen im Auge behält, sollte man mit jedem Pythonprogramm zu recht kommen.


    Und weil die meisten daran verzeifeln: Viele Pythonpakete in openSUSE haben Namen, die in den Dokus im Netz niemals auftauchen.
    Da folgt openSUSE eisern seiner eigenen Methodik, was im Resultat die Meisten an nicht auffindbaren Paketen scheitern lässt.


    Aber Python bringt selbst ein paar sehr effiziente Methoden mit seine Pakete einfach aus den PyPi Repos zu holen.
    easyinstall und pip wären da zu nennen.
    (Die es gibt die -logisch- für python2.x und python3.x . Ufpasse!!)

  • Wenn ich aber die Konsole befrage, dann wird nur die 2.7 Version gemeldet

    Mit Completion:

    Code
    ich@linux64:~> python
    python      python2     python2.7   python3     python3.4   python3.4m  
    ich@linux64:~> python


    Du siehst also, wie man python 3 aufrufen kann.

    Code
    ich@linux64:~> ls -al /usr/bin/pytho*
    lrwxrwxrwx 1 root root     9  1. Jan 09:10 /usr/bin/python -> python2.7
    lrwxrwxrwx 1 root root     9  1. Jan 09:10 /usr/bin/python2 -> python2.7
    -rwxr-xr-x 1 root root  6352 28. Okt 16:56 /usr/bin/python2.7
    lrwxrwxrwx 1 root root     9  1. Jan 09:10 /usr/bin/python3 -> python3.4
    -rwxr-xr-x 2 root root 10504 28. Okt 18:47 /usr/bin/python3.4
    -rwxr-xr-x 2 root root 10504 28. Okt 18:47 /usr/bin/python3.4m
  • Mit Completion:


    ich@linux64:~> python
    python python2 python2.7 python3 python3.4 python3.4m
    ich@linux64:~> python


    Das habe ich nicht kapiert... ?(
    Was genau hast Du eingegeben? "python" habe ich ja auch eingetippt...




    Wie in Linux üblich, ist es möglich mehrere Versionen gleichzeit installiert zu haben.
    Dafür gibt es die Familie der alternatives Programme. Zum Einstellen gibt es update-alternatives

    Hört sich plausibel an- ohne jetzt die Details kapiert zu haben- weswegen ich den Unterschied zu Suse nicht einschätzen kann.



    openSUSE geht jedoch bei Python einen komplett eigenen Weg.
    Nämlich keinen. Der alternatives Mechanismus müsste von dir selbst eingerichtet werden,
    was nicht schwer ist - es werden letztlich nur ein paar Links gesetzt.

    Hört sich aber eher unpraktisch an. Wo soll der Vorteil liegen? Oder sind Vor-/Nachteil hier keine passende Kategorie?


    Code
    linux-vd4l:~ # file $(which python)
    /usr/bin/python: symbolic link to `python2.7'

    Du hast recht (und nochmal den Grund der Verwunderung bestätigt)


    Ich wollte mich schon lange mal mit Python beschäftigen, besonders wegen Django (das wohl inzwischen größtenteils auf die 3er Fork portiert wurde).


    pip kenne ich vom Hörensagen... wenn man sich manche Pythonseiten anschaut, muss das Installieren mit pip ein Kinderspiel sein.


    Ich habe mal etwas quergelesen. pip wird wohl seitens Python als Installer empfohlen, konkret:


    The Python Packaging Authority (PyPA) is a working group that maintains many ofthe relevant projects in Python packaging.

    Diese Packing Authority hat folgende Meinung:


    The PyPA recommended tool for installing Python packages.

    Aber:


    Be cautious if you're using a Python install that's managed by your operatingsystem or another package manager. get-pip.py does not coordinate withthose tools, and may leave your system in an inconsistent state.


    Womit wir bei einem weiteren Problem wären:
    Denn ich möchte mein System ja nicht in einem inkonsistenten Status hinterlassen, nachdem ich den pip-Installer benutzt habe. Andererseits wir dieser pip-Installer empfohlen. Was tun?
    Die Alternativen dazu habe ich mir jetzt nicht angesehen, aber pip wird AFAIK häufig eingesetzt.




    Und weil die meisten daran verzeifeln: Viele Pythonpakete in openSUSE haben Namen, die in den Dokus im Netz niemals auftauchen.
    Da folgt openSUSE eisern seiner eigenen Methodik, was im Resultat die Meisten an nicht auffindbaren Paketen scheitern lässt.

    Zum Schluss kommt noch einer drauf.... :S
    Und was ist die "Methodik von Suse"?


    In der Hoffnung vor dem Verzweifeln bewahrt zu werden....

    Für den Inhalt des Beitrages 103754 haftet ausdrücklich der jeweilige Autor: Suse-Paul

  • Das habe ich nicht kapiert...
    Was genau hast Du eingegeben? "python" habe ich ja auch eingetippt...

    Python eintippen und statt der Return/Enter Taste die TAB Taste drücken.
    Das nennt sich Bash-Completion.
    Wenn dann der Befehl eindeutig ist, wird die Bash nach drücken der TAB Taste diese Eingabe ergänzen bis zum ganzen Befehl.


    Versuch einmal:

    Code
    ich@linux64:~> systemc


    und drücke die TAB Taste.
    Da es nur eine Befehl gibt, der mit systemc beginnt, erweitert die Bash diese Eingabe zum ganzen Befehl:

    Code
    ich@linux64:~> systemctl

    Jetzt versuche nur:

    Code
    ich@linux64:~> system

    Drücke die TAB taste und was passiert?
    Nichts.
    Mögliche Ursachen:
    1. Tippfehler
    2. Es gibt mehrere Befehle die mit system anfangen.


    den 2.Punkt kann man ganz einfach überprüfen, indem man die TAB Taste 2x kurz hintereinander drückt, TAB-TAB:

    Wie du siehst, fangen alle diese Befehle mit system an, und ein Befehl würde nur ergänzt, wenn er eindeutig aufzulösen wäre, man gibt jetzt einfach die nächsten Buchstaben des Befehls ein:


    Code
    ich@linux64:~> system-

    Drücke TAB und nun wird erweitert zu:

    Code
    ich@linux64:~> system-config-printer

    Aber wie du oben bei TAB-TAB sehen kannst, gibt es 2 Befehle die mit diesen Buchstaben anfangen:

    Code
    system-config-printer          
    system-config-printer-applet

    Ich wollte nicht system-config-printer (was jetzt einfach durch betätigen der Return-Taste ausgeführt würde) sondern, system-config-printer-applet, ich gebe jetzt einfach den nächsten Buchstaben ein:

    Code
    ich@linux64:~> system-config-printer-

    und es erscheint nach drücken der TAB Taste:


    Code
    ich@linux64:~> system-config-printer-applet

    Jetzt Return drücken und es würde der Befehl ausgeführt




    Python
    ich@linux64:~> system-config-printer-applet 
    /usr/share/system-config-printer/applet.py:45: PyGIWarning: Notify was imported without specifying a version first. Use gi.require_version('Notify', '0.7') before import to ensure that the right version gets loaded.
      from gi.repository import Notify
    system-config-printer-applet: failed to connect to session D-Bus

    Wie du siehst, erspart dir die Completion Tipparbeit und vermeidet auch Tippfehler, denn:


    Wenn bei 1xTAB keine Ausgabe, dann bei 2xTAB keine Ausgabe ist in dem bis dahin eingegebenen Befehl ein Tippfehler oder es gibt keine Befehl, der mir deiner Eingabe ergänzt werden könnte.
    Also USERFEHLER!


    Zu meiner Ausgabe oben:
    python eintippen und 2xTAB drücken ergibt:


    Code
    ich@linux64:~> python
    python      python2     python2.7   python3     python3.4   python3.4m  
    ich@linux64:~> python

    Wie du siehst, ergibt es eine Liste mit Befehlen, und durch drücken von TAB-TAB springt der Cursor in die nächste Zeile, dein eingegebener Befehl wird wieder mit ausgegeben und du könntest einfach den nächsten Buchstaben eingeben.
    Diese Befehle fangen alle mit python an und anhand der Ausgabe von ls -al /usr/bin/python* siehst du, das es 3 python Befehle gibt:

    Code
    -rwxr-xr-x 1 root root  6352 28. Okt 16:56 /usr/bin/python2.7
    -rwxr-xr-x 2 root root 10504 28. Okt 18:47 /usr/bin/python3.4
    -rwxr-xr-x 2 root root 10504 28. Okt 18:47 /usr/bin/python3.4m

    Die anderen sind nur Links auf einen der 3 Befehle.....

  • Dank erstmal für die ganzen Hinweise.
    Erstaunlich, was sich da überall für Überraschungstüren auftun... Hätte ich mir alles so nicht vorgestellt


    Einfach Python lernen.


    Dann weißt du das.
    Und wirst nur noch virtualenv und pip nehmen.

    Also, ich kann Python schonmal "Hello World" sagen lassen...
    Schön wäre es, vor den kommenden Dramen ein wenig über die erratischen Dinge zwischen openSuse und Python zu wissen.... Gibt es dazu irgendwo eine Art Übersicht?



    Python eintippen und statt der Return/Enter Taste die TAB Taste drücken.
    Das nennt sich Bash-Completion.

    Da habe ich echt mal wieder dazugelernt, Danke.
    Ich sollte mich doch mal näher mit der Bourne-again-Shell beschäftigen.

    Für den Inhalt des Beitrages 104054 haftet ausdrücklich der jeweilige Autor: Suse-Paul