MicroPython unterstützt nicht alle Python-Standardbibliotheken. Die ausgeschlossenen Module sind für die Verwendung mit dem eingebetteten Controller nicht geeignet. Einige Module können vom Mikrocontroller aufgrund eines hohen Speicherverbrauchs (z. B. sqlite3) oder mangelnder erforderlicher Hardwarefunktionalität (z. B. Multiprocessing) nicht implementiert werden. Eine vollständige Liste der Python-Standardbibliotheken finden Sie hier: Python 3.4 Standard lib
Es gibt einige Unterschiede zwischen CPython3 (eine Referenzimplementierung der Python3-Sprache) und MicroPython. Unterschiede fallen in drei Kategorien. Jede Kategorie hat einen anderen Status hinsichtlich der Möglichkeit, dass sich die in jeder Kategorie klassifizierten Elemente ändern.
MicroPython ist für Umgebungen mit eingeschränkteren Bedingungen vorgesehen, insbesondere für Umgebungen mit mehr Leistung und Speicherbeschränkungen als das "Desktop" -System, auf dem CPython3 ausgeführt wird. Kurz gesagt, MicroPython muss unter Berücksichtigung dieser eingeschränkten Umgebung entwickelt werden, mit Ausnahme von Funktionen, die nicht zum Zielsystem passen oder nicht skaliert werden können. Es ist unwahrscheinlich, dass Sie den Unterschied im "Design" ändern.
MicroPython enthält keine umfangreiche Standardbibliothek von Modulen. Es ist unmöglich und unangemessen, eine vollständige CPython3-Bibliothek bereitzustellen. Viele Module sind im Kontext eingebetteter Systeme weder verfügbar noch nützlich. Es ist nicht genügend Speicher vorhanden, um die gesamte Bibliothek auf einem kleinen Gerät bereitzustellen. Daher verfolgt MicroPython einen minimalen Ansatz. Der Interpreter enthält nur den Kerndatentyp (+ Module, die für eine bestimmte Hardware spezifisch sind), und der Rest hängt vom Drittanbieter der jeweiligen Benutzeranwendung ab. Das Projekt micropython-lib bietet eine nicht monolithische Standardbibliothek für MicroPython (Forum. viewtopic.php? f = 5 & t = 70))
Im Gegensatz zu CPython3, das Referenzzählungen verwendet, verwendet MicroPython die Speicherbereinigung als primäres Mittel zur Speicherverwaltung.
MicroPython implementiert nicht das vollständige CPython-Objektdatenmodell, sondern nur eine Teilmenge davon. Die Methode "new", bei der es sich um eine erweiterte Verwendung der Mehrfachvererbung handelt, funktioniert möglicherweise nicht. Die Reihenfolge der Methodenauflösung ist unterschiedlich (# 525). Metaklassen werden (zumindest noch nicht) nicht unterstützt.
Das Design von MicroPython basiert nicht auf Deskriptorobjekten. Bisher wurden alle nativen Python-Funktionen (und Eigenschaften usw.) implementiert, mit Ausnahme expliziter Deskriptoren. Deskriptoren gelten als "zu dynamische" Merkmale, was dem Ziel widerspricht, schnell und effizient zu sein. Als Opt-In-Funktion haben wir jedoch eine vereinfachte Unterstützung für Deskriptoren implementiert.
Da MicroPython "Micro" ist, implementiert es nur eine Teilmenge von Features und Parametern einer bestimmten Funktion oder Klasse. Jedes einzelne Problem kann als "Unterschied in der Implementierung" behandelt und behoben werden, es ist jedoch unwahrscheinlich, dass es 100% der Funktionalität von CPython abdeckt.
Da MicroPython "Mikro" ist, unterstützt es nur eine minimale Teilmenge von Introspektions- und Reflexionsfunktionen (Objektnamen, Dokumentzeichenfolgen usw.). Jedes einzelne Feature wird als Implementierungsunterschied behandelt und kann behoben werden, es ist jedoch unwahrscheinlich, dass 100% der CPython-Features abgedeckt werden.
Die Funktion print () überprüft nicht die rekursiven Datenstrukturen, die CPython verarbeitet. Da jedoch die Stapelverwendung überprüft wird, stürzt die Anzeige rekursiver Datenstrukturen nicht aufgrund eines Stapelüberlaufs ab. Es ist möglich, eine CPython-ähnliche Verarbeitung für rekursive Datenstrukturen auf Python-Anwendungsebene zu implementieren. Erstellen Sie eine Funktion, die einen Verlauf jedes referenzierten Objekts speichert, und überschreiben Sie das integrierte print () mit einer benutzerdefinierten Funktion. Eine solche Implementierung kann natürlich viel Speicher verbrauchen. Daher ist es nicht auf MicroPython-Ebene implementiert.
MicroPython optimiert den Umgang mit lokalen Variablen und zeichnet keine Informationen zur Selbstbeobachtung auf. Beispielsweise hat local () keine Einträge für lokale Variablen.
Einige Funktionen sind möglicherweise nicht mit eingeschränkten Systemen kompatibel oder lassen sich möglicherweise nicht einfach effizient implementieren. Solche Funktionen werden als "Implementierungsunterschiede" bezeichnet, und einige können (nach entsprechender Diskussion und Prüfung) einer zukünftigen Entwicklung unterliegen. Viele der "Implementierungsunterschiede" wirken sich auf die Größe und Leistung von MicroPython-Implementierungen aus, sodass einige MicroPython-Ziele möglicherweise bestimmte Funktionen nicht implementieren.
Die Unicode-Unterstützung wird ausgeführt. Es basiert auf einer internen Darstellung mit UTF-8. Volle Unterstützung für Zeichenfolgen, die Unicode-Escapezeichen in den Formaten \ xNN, \ uNNNN und \ U000NNNNN enthalten. \ N {...} wird nicht unterstützt. # 695.
Die Objektfinalisierung (__del__ ()
-Methode) wird vom integrierten Typ nicht unterstützt, wird jedoch von der Benutzerklasse unterstützt. Dies wird von # 245 unterstützt.
Die integrierte Unterklasse ist teilweise implementiert, weist jedoch verschiedene Unterschiede und Kompatibilitätsprobleme mit CPython auf. # 401
Es werden keine gepufferten E / A-Streams (io.TextIOWrapper und seine Oberklassen) unterstützt.
Das Schlüsselwort "async def" wird wie folgt vereinfacht und implementiert: Es gibt keinen separaten Objekttyp "coroutine", und "async def" ist die "Ausbeute" oder "Ausbeute von", die im Funktionskörper angezeigt wird. Definieren Sie einfach eine Generatorfunktion, für die nichts erforderlich ist. Die Verwendung von "Ausbeute" oder "Ausbeute von" in der Funktion "async def" wird nicht erkannt oder verboten.
"asynchron mit" sollte der Beschreibung in PEP492 entsprechen.
"async for" sollte der Beschreibung in PEP492 entsprechen.
Die Methode "await" unterstützt keine "zukunftsähnlichen Objekte". Das Warten ist nur für Collouts und Generatoren verfügbar (nicht für "Zukunftsähnliche Objekte"). Es ist auch nur ein "Ertrag aus" Syntaxzucker, der Iterables und Iteratoren akzeptiert, die CPython nicht zulässt.
Unterstützung zum Beispiel __dict __
ist optional (in vielen Ports deaktiviert) und schreibgeschützt, also foo .__ dict __ ['bar'] = 23
oderfoo .__ dict __. Update ({'bar': 23})
funktioniert nicht. # 1757, # 2139
Bekannte Probleme werden im Wesentlichen als Fehler oder falsche Funktionen angesehen und behoben. Daher sollten Sie sich im Idealfall auch auf das Bug-Ticket beziehen, um zu erfahren, was hier geschrieben steht. Beachten Sie jedoch, dass diese bekannten Probleme unterschiedliche Prioritäten haben, insbesondere innerhalb des umfassenderen Entwicklungsprozesses. Wenn Sie tatsächlich von dem Problem betroffen sind, fügen Sie Ihrem Ticket die Falldetails hinzu (registrieren Sie sich, wenn das Ticket noch nicht vorhanden ist), um es in Ihrem Plan wiederzugeben. Das Senden von Patches ist noch produktiver. (Beachten Sie, dass die Liste der nicht implementierten Module / Klassen nur diejenigen enthält, deren Implementierung als sehr wichtig angesehen wird. Wie bereits erwähnt, bietet MicroPython eine allgemeine vollständige Standardbibliothek. Abwesend.
Einige Funktionen überprüfen ihre Argumente nicht ausreichend und können abstürzen, wenn der falsche Argumenttyp übergeben wird. ~~
Einige Funktionen verwenden "assert ()", um Argumente zu überprüfen. Falscher Argumenttyp übergeben → Falsche Bedingungen führen zum Absturz. Ersetzen Sie dies durch eine Python-Ausnahme.
~~ Integrierte Funktionen können nicht auf die übliche Weise überschrieben werden. Bisher wurde das "eingebaute" Modul nicht implementiert, sodass alle Überschreibungen nur innerhalb des aktuellen Moduls funktionieren. # 959 ~~
Die permanente Bytecode-Unterstützung (.pyc-Analog) befindet sich in der Beta.
Die Funktion ~~ print () verwendet nicht die Python-Stream-Infrastruktur, sondern direkt die zugrunde liegende Funktion C printf (). Das Überschreiben von sys.stdout wirkt sich also nicht auf print () aus. # 209 ~~
Derzeit können sys.stdin, sys.stdout und sys.stderr nicht überschrieben werden (aus Effizienzgründen werden sie im Nur-Lese-Speicher gespeichert).
~~ Die fortgeschrittenere Verwendung von Paket- / Modulimporten wurde noch nicht vollständig implementiert. # 298 ~~
~~ Die Ausnahmebehandlung durch den Generator ist nicht vollständig implementiert. ~~ (Einige kleine Details müssen möglicherweise noch behandelt werden.) # 243
str.format () kann erweiterte / mehrdeutige Funktionen übersehen (Aber fast vollständig implementiert). \ # 407, # 574
Der Zeichenfolgenformatoperator ~~% hat möglicherweise erweiterte Funktionen verpasst ~~ # 403, [# 574] ](Https://github.com/micropython/micropython/issues/574)
Die Implementierung des struct
-Moduls (mit dem Namen ustruct
) sollte alle grundlegenden Funktionen ~~ haben, aber einige Syntaxzucker (wie das Wiederholen von Typzeichenfolgen). Nein ~~. Umbenannt in die vollständige struct
-Funktion, die auf Python-Ebene funktioniert
Anstelle des "re" -Moduls ist das minimierte "ure" -Modul eine Teilmenge der von re bereitgestellten Funktionalität. micropython-lib bietet eine vollständige Implementierung basierend auf der "PCRE" -Engine für die "Unix" -Portierung # 13.
Bisher gibt es nur das "io" -Modul und den Beginn der Klassenhierarchie.
Die Klasse "collection.deque" ist nicht implementiert.
~~ memoryview
Objekt ist nicht implementiert. ~~
Die Zuweisung / Löschung von Container-Slices ist nur teilweise implementiert. # 509
17.3 Argument Slicing ist nur teilweise implementiert.
~~ Schlüsselwörter und Nur-Schlüsselwort-Argumente erfordern mehr Arbeit. ~~ # 466, # 524
Für die Methode "new" \ # 606, [# 622](https: // github) ist nur grundlegende Unterstützung verfügbar. com / micropython / micropython / issue / 622)
~~ lange Int-Bit-Operation ist nur teilweise implementiert (X & 0xffffffff-Idiom für die Aufgabe, vorzeichenbehaftete 32-Bit-Werte ohne Vorzeichen umzuwandeln). ~~ # 1810
Recommended Posts