Erste Frage Programmierumgebung Pyhton auf Mac, möglichst kompatibel mit Raspberry PI

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mheber
User
Beiträge: 1
Registriert: Samstag 6. Januar 2024, 15:50
Wohnort: Krefeld

Hallo zusammen,

habe mich gerade hier im Forum angemeldet, hat auch alle super schnell geklappt, vielen Dank!

Aktuell habe ich immer mal wieder den Bedarf für meine Rasberry Pis Programme zu erstellen, zu optimieren oder auch einfach ans Laufen zu bekommen.

Auch auf meinem MAC stehen immer mal wieder kleine Programmieraufgaben an.

Selber habe ich früher (bitte nicht lachen) mit Fortran 77 recht komplexe Programme (Finite-Elemente-Simulationen) auch im professionellen Umfeld entwickelt, mich dann aber eigentlich jahrzehntelang nicht mehr ernsthaft mit dem Programmieren beschäftigt.

Python ist aus meiner Sicht für mich die richtige Programmiersprache für den Wiedereinstieg, ist auf dem Pi allerdings alles recht unkomfortabel und den Pi habe ich auch nicht immer dabei etc.pp.

Daher suche ich eine Python Installation für den Mac, am besten mit tollem Debugger etc. mit der ich Programme auf dem MAC entwickeln kann, die sich dann aber am besten ohne viele Modifikationen auch auf den Pi kopieren lassen und da dann auch laufen.

Was könnt Ihr da empfehlen, es gibt ja viele unterschiedliche Lösungen / Möglichkeiten.

Viele Grüße


Michael
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hallo Michael,

ich entwickele fuer beide Plattformen (und noch ein paar mehr). Grundsaetzlich gibt es erstmal viele gute Umgebungen, um auf dem Mac Python zu entwickeln. Die populaeren sind PyCharm und VSCode, persoenlich nutze ich Emacs, andere Vim, und dann gibt es auch noch zB Thonny, das speziell bei Micropython fuer Microcontroller (also kleiner als der Pi, zB Pico oder ESP) Staerken hat.

Wenn deine Programme keine spezifischen Abhaengigkeiten haben, laeufen sie (Installation aller Abhaengigkeiten vorrausgesetzt) auf allen Plattformen. Es gibt divere Wege, den Code auf den Pi zu bekommen, zB scp, und mit ein bisschen shell-skripten hat man da IMHO schnell ausreichend Komfort erreicht. Wer es grafisch mag, gibt's bestimmt auch was - ich bin Shell-User.

Der Pi aber wird natuerlich of genutzt, um seine spezifischen Faehigkeiten zu nutzen, und das sind aus deiner Sicht zwei Bereiche:

- Linux als Plattform.
- Hardware-Spezifika, also GPIOs und was man da so anbauen kann.

Da wird es etwas komplizierter. Wenn sich das ganze "nur" auf Linux beschraenkt, kann man auf dem Mac (oder Windows) ggf. mit einer VM testen, ob das, was man sich da so zusammengereimt hat. ZB Dinge, die mit USB-Geraeten arbeiten, system-services benutzen/darstellen, und so weiter. Spaetestens bei der Hardware geht aber auch das nicht mehr.

Und dann muss man in die Programmiertrickkiste greifen: Abstraktion ist das Stichwort. Ich habe zB durchaus schon Fake-GPIO-Module geschrieben, die ich mit Tkinter gekoppelt habe, um Python-Skripten vorzugaukeln, da waere ein Input. Und dagegen auf dem Mac programmiert. Das Programm dann auf dem Pi benutzt eben einfach die echten Bibliotheken.

Wo man dann auch Grenzen hat: bei so Features wie Autovervollstaendigung etc in den IDEs. Denn die koennen naturgemaess nur mit Paketen arbeiten, die auch installiert sind. Aber ein gpiozero kann man auf dem Mac (oder Windows oder Linux) nicht installieren, dass muss zwingend auf dem Pi laufen. Da muss man dann stark sein, und ohne auskomme. Die Abstraktion von weiter oben hilft auch da, weil die dann diese Probleme an einer Stelle haelt, die man geflissentlich ignoriert.

Das mal als kleiner Ueberblick,

__deets__
Benutzeravatar
noisefloor
User
Beiträge: 3858
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Aber ein gpiozero kann man auf dem Mac (oder Windows oder Linux) nicht installieren,
Doch das geht, siehe https://gpiozero.readthedocs.io/en/stab ... _gpio.html.

Und wenn man für gpiozero die Mock-Factory aktiviert kann man auch Skripte testweise auf dem PC erstellen. Das ist aber bei mir auch schon ein paar Jahre her, dass ich das mal ausprobiert habe.

Gruß, noisefloor
Benutzeravatar
Dennis89
User
Beiträge: 1165
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,
Aber ein gpiozero kann man auf dem Mac (oder Windows oder Linux) nicht installieren, dass muss zwingend auf dem Pi laufen.
Ich habe hier auf meinem Fedora-Laptop `gpiozero` in einer von PyCharm angelegten venv installiert. Finde ich ganz cool, weil man mit `MockFactory` die Pins schön simulieren kann.
Folgendes Programm läuft auf dem Laptop und ist meine Vorlage, wenn ich mal was testen will.

Code: Alles auswählen

#!/usr/bin/env python3
from threading import Thread

from gpiozero import DigitalInputDevice, Device
from gpiozero.pins.mock import MockFactory

SENSOR_PIN = 17
USER_CHOICES = "high", "low", "exit simulation"


class SensorMotion(Thread):
    def __init__(self, sensor):
        Thread.__init__(self)
        self.sensor = sensor
        self.sensor_state = [self.sensor.pin.drive_low, self.sensor.pin.drive_high]
        self.letter_to_choice = {choice[0]: choice for choice in USER_CHOICES}

    @staticmethod
    def format_as_option(text):
        return f"({text[0]}){text[1:]}"

    def print_sensor_state(self):
        return f"GPIO-Pin-State is: {self.sensor.value}"

    def run(self):
        prompt = f'{", ".join(map(self.format_as_option, USER_CHOICES))}? : '
        while True:
            user_entry = self.letter_to_choice.get(input(prompt))
            if user_entry == "high":
                self.sensor_state[1]()
                print(self.print_sensor_state())
            elif user_entry == "low":
                self.sensor_state[0]()
                print(self.print_sensor_state())
            elif user_entry == "exit simulation":
                self.sensor_state[1]()
                print("Schönen Gruß und auf Wiedersehn!")
                break


def main():
    Device.pin_factory = MockFactory()
    sensor = DigitalInputDevice(SENSOR_PIN)
    sensor_simulation = SensorMotion(sensor)
    sensor_simulation.start()


if __name__ == "__main__":
    main()
Hoffe ich habe dich nicht falsch verstanden.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ah, um so besser. Damals ging's nicht, aber wenn es jetzt geht, ist das ja genau das, was ich vorgeschlagen habe: ein Mock der nicht-existenten Funktionalitaet. Schoen, dass das geht.
Benutzeravatar
__blackjack__
User
Beiträge: 13131
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und wenn man pigpiod verwendet kann ja sogar remote die Pins auf dem Raspi ansprechen. Das geht natürlich nicht für alles, aber solange das nichts Timingkritisches dabei ist, kann man da doch das ein oder andere in der Konstellation testen.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Antworten