Installation von Pygame schlägt fehl

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen.

    Ich versuche bereits seit mehreren Tagen das Modul pygame über pip zu installieren. Jedoch schlägt dies immer wieder fehl. Zahlreiche Tipps aus diversen Google-Treffern waren leider bislang auch nicht zielführend. Hat hier jemand noch eine Idee?

    VG Dennis


    IST-Zustand:

    - Rapberry Pi Zero (WH) mit dem Raspberry Pi OS Lite (32-bit) ohne Desktopumgebung

    - Python 2.7.16

    - Python 3.7.3

    - pip 18.1 from /usr/lib/python2.7/dist-packages/pip (python 2.7)

    - pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)


    Ausgabe nach erfolglosem Versuch:

  • Zur hilfreichsten Antwort springen
  • Hallo hyle,

    danke für Deine rasche Rückmeldung.

    Hier kommt die Info, dass es scheinbar schon vorhanden sei:

    Code
    dte@raspberrypi:~ $ sudo pip3 install pygame
    [sudo] Passwort für dte:
    Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
    Requirement already satisfied: pygame in /usr/local/lib/python3.7/dist-packages (2.0.1)

    Aber wenn ich das Modul dann in Python3 importieren möchte, erhalte ich das hier:

    Python
    dte@raspberrypi:~ $ python3
    Python 3.7.3 (default, Jan 22 2021, 20:04:44)
    [GCC 8.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pygame
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/local/lib/python3.7/dist-packages/pygame/__init__.py", line 81, in <module>
    from pygame.base import * # pylint: disable=wildcard-import; lgtm[py/polluting-import]
    ImportError: libSDL2-2.0.so.0: cannot open shared object file: No such file or directory
  • Hallo,

    wenn du die Installation als User durchführst, also ohne 'sudo'?

    Ansonsten musst du eventuell 'libSDL2-2.0' manuell installieren. Auf diese Lösung stoßt man zumindest wenn man nach dem Fehler sucht.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Nachtrag:

    Jetzt habe ich natürlich aufgrund einiger Methoden schon ganz schön im System herumgewurschtelt.

    Vielleicht ist es daher nun sinnvoll, das PI-OS Lite Image noch einmal frisch auf die Karte zu kopieren und noch einmal bei null zu beginnen.

    Bislang bin ich nach der Installation immer folgendermaßen vorgegangen:

    Erster Boot:

    - sudo raspi-config

    - WiFi-Verbindung hergestellt

    - Tastatur und Ländereinstellung auf de_DE gesetzt

    - ssh enabled

    - neuen Benutzer (dte) angelegt und mit usermod -aG sudo dte Root-Rechte vergeben

    - dann Updates durchgeführt: sudo apt-get update && sudo apt-get upgrade

    - jetzt pip/pip3 installiert: sudo apt install python-pip und sudo apt install python3-pip

    - abschließend dann: sudo pip install pygame und sudo pip3 install pygame

    Ist dieses Vorgehen so überhaupt korrekt gewesen oder hab ich mir da irgendwo schon etwas verbaut?

  • Hallo,

    wenn du die Installation als User durchführst, also ohne 'sudo'?

    Ansonsten musst du eventuell 'libSDL2-2.0' manuell installieren. Auf diese Lösung stoßt man zumindest wenn man nach dem Fehler sucht.

    Grüße

    Dennis

    Aha. Okay.

    Also gleich nach dem ersten Boot alle Maßnahmen unter sudo su durchführen? Wäre ich dann so überall auf Nummer sicher?

    • Hilfreichste Antwort

    Ansonsten musst du eventuell 'libSDL2-2.0' manuell installieren. Auf diese Lösung stoßt man zumindest wenn man nach dem Fehler sucht

    WAAAAH! Es hat geklappt. Danke, danke, danke... Tausend Dank!

    Das hier hatte gefehlt: sudo apt-get install -y libsdl2-2.0-0

    Code
    Paketlisten werden gelesen... Fertig
    Abhängigkeitsbaum wird aufgebaut.
    Statusinformationen werden eingelesen.... Fertig
    Das folgende Paket...
    ....
    ....
    ....
    ....
    Trigger für libc-bin (2.28-10+rpt1+rpi1) werden verarbeitet ... Fertig

    Und siehe da:

    Code
    dte@raspberrypi:~ $ python3
    Python 3.7.3 (default, Jan 22 2021, 20:04:44)
    [GCC 8.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pygame
    pygame 2.0.1 (SDL 2.0.9, Python 3.7.3)
    Hello from the pygame community. https://www.pygame.org/contribute.html
    >>> exit()
    dte@raspberrypi:~ $

    Vielen Dank. Jetzt kann es dann endlich losgehen. Super Forum - super Hilfe - 1A. Dankeschön. :) :) :)

    VG Dennis

  • Hallo,

    'sudo' gibt dir Administratorrechte. Darauf solltest du so weit es geht verzichten, weil man damit auch viel Schaden anrichten kann.

    Es reicht auch die Pakete für 'python3' zu installieren. 'python' bezieht sich auf Python2 und das wird schon seit längerem nicht mehr durch die Entwickler unterstützt.

    sudo apt install python3-pip

    und dann

    pip3 install pygame

    Wenn du 'pygame' mit sudo installiert hast, musst du dein Python-Programm in dem du 'pygame' verwendest auch mit 'sudo' ausführen und das kann bei Programmierfehlern auch das System schädigen.


    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hey Dennis89.

    Vielen Dank!

    Wenn also der "Super User" etwas installiert, dann kann auch nur er selbst auf die Installation zugreifen. Bislang habe ich immer gedacht, dass der su der einzige ist, der etwas installieren kann, diese Installation jedoch auch allen anderen zur Verfügung stellt.

    Jetzt habe ich es verstanden:

    Wenn mit sudo pip3 install pygame installiert worden ist, dann kann ich es auch nur mit sudo python3 nutzen.

    Also lieber nur pip3 install pygame, dann geht der Aufruf auch ohne sudo, also nur python3 (und dann import pygame, usw.)

    Super.

    Danke für die Erläuterung. Das hilft sicher bei zukünftigen Problemen, wenn man das Grundlegende versteht. Nochmal: Dankeschön!

    VG Dennis

  • Hey Freunde,

    beschämt möchte ich mich noch einmal ratsuchend an Euch wenden.

    Ich habe gerade Feierabend im Hoome-Office und wollte mich jetzt Python mit Pygame widmen. Gemäß dem Tutorial https://www.python-lernen.de/pygame-tutorial.htm wollte ich nun Schritt für Schritt beginnen - aber leider kam nun die nächste Hürde...

    Mein Testprogramm gui.py besteht derzeit nur aus zwei Zeilen und sieht folgendermaßen aus:

    Code
    import pygame
    pygame.init()

    Und schon bekomme ich wieder Fehlermeldungen - dieses Mal geht es scheinbar um die fehlende Möglichkeit einer Soundausgabe meines Raspberry Pi Zeros (welche ich ja auch gar nicht benötige):

    • Wie kann ich hier weiter vorgehen? Muss ich nun alle Dateien, so wie mit den vorherigen libsdl2-2.0-0, libsdl2-mixer-2.0-0 und libsdl2-image-2.0-0 verfahren?
    • Ist das bei mir wirklich alles so der Normalfall? Ich frage nur, weil... na.... wenn ich irgendetwas über sudo install installiere und dann sehe wie viele Quellen und Pakete in der jeweiligen Installation enthalten sind, wieso wurden diese dann nicht schon alle bei der Installation von Pygame mit erledigt?
    • Ist die Nutzung von Pygame daher überhaupt auf einem abgespeckten Zero vorgesehen bzw. möglich?

    Viele Grüsse

    Dennis

  • Du arbeitest mit einem RPi Zero. Der hat keine Klinke für Audioausgang, also wird auch keine Soundkarte gefunden. Bei den anderen Modellen käme diese Meldung nicht. Entweder Du besorgst Dir einen USB-Soundkartenstick (für ein paar Euros in Amazonien [Anzeige]) oder Du verbindest HDMI mit einem Moni/TV. Bei letzterem bin ich mir aber nicht sicher.

    Die /etc/asound.conf müsste ggf. auch noch angepasst werden.

  • Ich hatte das vorhin mal durchgespielt mit der Installation von pygame. Nicht umsonst schrieb ich die Hinweise zu libsdl2-mixer-2.0-0 und libsdl2-image-2.0-0. ;)

    Die ALSA-Meldungen hatte ich auch, aber zum Glück eine USB-Soundkarte da. Danach funktionierte zumindest der Sound. Ein Mini-HDMI-Kabel oder Adapter fand ich auf die schnelle nicht, auch wenn ein Adapter eigentlich in meiner Bastelkiste liegen müsste. :shy: Hatte ich bestimmt mal verborgt. Egal, über SSH konnte ich jedenfalls somi kein Bild sehen.

  • ...oder Du verbindest HDMI mit einem Moni/TV...

    Und wieder ein Volltreffer! Ich war über ssh drauf und der letzte Start des RPis erfolgte ohne angeschlossenem Touch-Display. Nach einem Neustart und erneuter Ausführung direkt über die Konsole kam dann keine Fehlermeldung mehr.

    Erneut: Dankeschön!

    Du hast Pygame über pip, installiert, das hat keine Ahnung von der Paketverwaltung der Linux-Distribution, und umgekehrt.

    Das klingt logisch und erklärt es. Denke, dass ich das verstanden habe. Auch Dir: Dankeschön! :)

  • hyle

    Ich glaube jetzt auch zu verstehen, wofür die libsdl2-image-2.0-0 zuständig ist. Ohne diese Datei konnte ich nur unkomprimierte Bitmaps über pygame.image.load() nutzen. Auf pygame.image.get_extended() erhielt ich bislang auch immer ein False - Nach dem Einbinden kommt hier dann ein True und jetzt werden auch meine GIFs geladen. :) Dankeschön!

    Aus Deinem vorherigen Post bezügl. der ALSA-Meldung und der Tatsache, dass "Mixer" irgendwie nach Sound klingt, schließe ich, dass die Mixer-Datei demnach für die Soundausgabe zuständig ist - richtig? (Ist für mein Vorhaben nun tatsächlich nicht relevant - aber es ist schön, wenn ich den Sinn hinter den nötigen Aktionen verstehe) - auch hier noch einmal: Danke Dir!

    Da ich meine GIF-Buttons nun laden kann und mir mit diesen eine Benutzeroberfläche zusammengebaut habe, bin ich nun beim Zuweisen von Benutzereingaben angekommen. Die Eingaben meiner angeschlossenen USB-Maus funktionieren auch - jedoch soll die Bedienung letztendlich ja über den Touchscreen erfolgen. Hier erhalte ich nun folgende Fehlermeldung:

    INFO: The key you just pressed is not recognized by SDL. To help get this fixed, please report this to the SDL forums/mailing list <https://discourse.libsdl.org/> EVDEV KeyCode 330

    Hierzu habe ich unter https://discourse.libsdl.org/t/evdev-keycode-330/25652 herausgelesen, dass dieser Fehler noch bis SDL2-Version 2.0.9 bestand, ab 2.0.10 jedoch gefixt worden sein soll.

    Ich tue mich gerade noch sehr schwer damit, eigene Installationspakete zusammenzustellen und daraus eine ausführbare Installation zu bauen. Kannst Du mir sagen, wie ich die SDL2-Version updaten kann. Aktuell ist scheinbar 2.0.17 vorhanden.

    Viele Grüsse
    Dennis

  • Nice: apt search libsdl2 kannte ich auch noch nicht - dann werde ich da von Zeit zu Zeit einmal hereinschauen.

    Aber: Problem gelöst!

    Es kommt zwar weiterhin bei jedem event.type==FINGERDOWN an event.type==FINGERUP die besagte Fehlermeldung - jedoch nur in der Konsole, welche man ja gar nicht auf dem angeschlossenen Touchscreen sieht, da die Bildschirmausgabe hier ja durch Pygame erfolgt. Lediglich über ssh würde man die Meldung dann auf dem Client sehen.

    Und über

    Code
    if event.type==FINGERDOWN or event.type==FINGERUP:
        loc_x = round((event.x)*1280)
        loc_y = round((event.y)*720)  

    bekomme ich trotzdem die x/y-Koordinaten des Touchpunktes ausgegeben.

    Danke für Eure raschen Hilfen - echt super, wie schnell man sich mit Eurer Forenhilfe in so etwas reinfuchsen kann. Dankeschön!

    Viele Grüsse
    Dennis

  • dte Die Bedingung kann man mit ``in`` etwas kürzer formulieren und ohne das man `event.type` zweimal hinschreiben muss.

    Statt `round()` möchte man wohl eher `int()` verwenden, denn `round()` impliziert, dass auch aufgerundet werden kann und je nach Koordinate dann vielleicht auch 1280 oder 720 heraus kommen könnte, wo die Werte aber nur von 0 bis 1279 beziehungsweise von 0 bis 719 gehen sollten.

    Die Klammern um die `event,.*`-Teilausdrücke sind unnötig.

    Python
        if event.type in [FINGERDOWN, FINGERUP]:
            x = int(event.x * 1280)
            y = int(event.y * 720)

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!