Python Development Environment/de



Eine vereinfachte Entwicklungsumgebung für Python in FreeCAD
Python ist eine Programmierumgebung, die in das FreeCAD-System integriert wurde. Mit Python stehen viele von FreeCAD bereitgestellte Abläufe für den programmierten Zugriff zur Verfügung. Python-Programme für FreeCAD werden in der Regel so entwickelt, dass sie entweder auf der Python-Konsole oder über die Makrofunktion von FreeCAD ausgeführt werden können (siehe Wie man Makros installiert).

Für die Programmentwicklung in Python stehen zahlreiche Werkzeuge zur Verfügung. Die komplizierenden Faktoren für die Entwicklung von Python zur Verwendung mit FreeCAD sind zweifach: Zum einen haben die Werkzeuge keine Unterstützung für die zahlreichen Datenstrukturen und Zugriffspunkte von FreeCAD; zum anderen funktionieren sie nicht "innerhalb von FreeCAD". Das bedeutet, dass Du mit ihnen Code außerhalb von FreeCAD entwickeln kannst und nicht in der Zielumgebung testen kannst; oder Du kannst Python in der Zielumgebung (d.h. der FreeCAD Umgebung) entwickeln, hast aber keine Unterstützung durch die Entwicklungswerkzeuge. Keines von beiden ist eine akzeptable Lösung.

Hintergrund
Die moderne Softwareentwicklung auf dem kommerziellen Standard erfolgt in der Regel mit einem Satz von Werkzeugen, der üblicherweise als 'IDE' bezeichnet wird. Typischerweise umfassen diese Werkzeuge die folgenden 3:


 * Quellcode Editor
 * Automatisierungstools bauen
 * Fehlersuchprogramme

die Standard sind, während die folgenden in einigen IDEs vorhanden sind, in anderen aber nicht:


 * intelligente Code Vervollständigung
 * integrierter Compiler, Interpreter oder beides
 * Versionskontrollsystem
 * Konstruktion der grafischen Benutzeroberfläche (GUI)
 * Klasse Browser
 * Objekt Browser
 * Klassenhierarchie Diagramm

Eine Zusammenfassung des Status dieser Werkzeuge innerhalb von FreeCAD ist ('N/V' bedeutet 'Nicht Verfügbar'.):

Es gibt viele Werkzeuge zur Unterstützung der oben genannten Funktion für die Python Programmierung, aber leider lassen sie sich nicht in die FreeCAD Entwicklungsumgebung integrieren.

Eine Liste von IDEs für Python findet man unter Integrierte Entwicklungsumgebungen für Python.

Editoren
Es gibt einen Editor für Python als Teil von FreeCAD, er wird durch Klicken auf die Schaltfläche Bearbeiten im Menü Makro -> Makros... gestertet. Soll der Editor eines Drittanbieters verwendet werden, der die Vorteile deiner Plattform ausnutzt, dann gibt es verschiedene Python-Editoren, für zahlreiche Plattformen und mit unterschiedlichem Funktionsumfang. Ein Vorteil der Verwendung eines externen Editors ist, dass der Anzeigebereich von FreeCAD für die Ausgabe (sowohl grafisch als auch in Textform auf der Konsole) genutzt werden kann, während der Quellcode in einer anderen Anwendung angezeigt wird. Eine Liste von Editoren für Python für eine Vielzahl von Plattformen ist verfügbar unter Python-Editoren.

Hinweis : Für den Macintosh funktioniert der Texteditor TextWrangler gut. Er verfügt über Code Hervorhebung und ausgezeichnete Suchmöglichkeiten. Es gibt Optionen zur Ausführung von Aufträgen in Python, aber diese funktionieren natürlich nicht mit der FreeCAD Umgebung.



Makro-Quellcode-Verzeichnis
Es gibt zwei Verzeichnisse, die von FreeCAD verwendet werden. Standardmäßig handelt es sich um dasselbe Verzeichnis, aber sie werden von verschiedenen Aufrufpunkten in FreeCAD angesprochen:
 * FreeCAD.ConfigGet ("UserAppData")
 * FreeCAD.ParamGet('User parameter:BaseApp/Preferences/Macro').GetString('MacroPath')

Das erste "UserAppData" zeigt auf ein Verzeichnis, in dem Dinge wie Konfigurationsdateien oder andere Dateien, die für den Benutzer bestimmt sind, aber nicht vom Benutzer bearbeitet werden sollen, gespeichert werden können.

Das zweite "MacroPath" verweist auf ein Verzeichnis, in dem die Python Dateien, bei denen es sich um Makro Dateien für FreeCAD handelt, gespeichert sind. Um eine Python Datei als Makro Datei für FreeCAD zu markieren, wird die Dateierweiterung von ".py" in ".FCMacro" geändert.

Standardmäßig befinden sich diese beiden Verzeichnisse am selben Ort, aber dies ist nicht notwendig. Es kann sinnvoll sein, den Speicherort für die Makro Dateien (*.FCMacro) auf einen anderen Speicherort zu ändern.

Das Bearbeiten von Dateien, die sich im "MacroPath" befinden, ist unkompliziert, der Texteditor wird dies berücksichtigen. Um die Benutzung von FreeCAD Makro Dateien zu erleichtern, ist es ratsam, alle Makro Dateien in dem Verzeichnis zu belassen, auf das "MacroPath" verweist.

Um das Verzeichnis "MacroPath" zu ändern, verwende Werkzeuge->Parameter bearbeiten und wähle dann Einstellungen/Makro/MakroPfad, wo der Text doppelgeklickt und bearbeitet werden kann. Alternativ kann "MacroPath" durch den Code geändert werden:

Fehlerdiagnoseprogramm
Fehlerdiagnoseprogramme (Debugger) enthalten normalerweise (unter anderem) zwei Hauptmerkmale:
 * Haltepunkte im Quellcode
 * Variablenprüfung

Haltepunkte sind 'Fallen', die in den Code gesetzt werden. Wenn der Ausführungspfad durch den Code auf einen dieser Haltepunkte trifft, wird die Ausführung angehalten oder unterbrochen. Beachte, dass die Ausführung nicht angehalten wird, da beim Anhalten eines Programms alle speicherresistenten Informationen wie z.B. Variablen verloren gehen. Während das Programm angehalten wird, kann der Inhalt der Variablen überprüft und manchmal geändert werden (was von der Fähigkeit des Fehlersuchprogramms abhängt). Im Allgemeinen kann der Quellcode nicht geändert werden, obwohl einige Umgebungen dies unterstützen. Wenn der Quellcode fertig ist, kann die Ausführung des Quellcodes wieder aufgenommen werden. Es können zahlreiche Haltepunkte im Code gesetzt werden und es kann zu zahlreichen Unterbrechungen durch die Haltepunkte kommen. Der Zweck des Fehlersuchprogramms besteht darin, sicherzustellen, dass die Ausführung mit den Haltepunkten und Unterbrechungen funktionell identisch mit der Ausführung ohne Haltepunkte ist.

Variablenprüfungen sind während der durch einen Haltepunkt verursachten Aussetzung der Ausführung verfügbar. Im Allgemeinen kann der Inhalt von Variablen eingesehen werden, viele Fehlersuchprogramme unterstützen auch die Bearbeitung des Inhalts, bevor die Ausführung wieder aufgenommen wird.

Obwohl ein voll funktionsfähiger Fehlersuchprogramm für FreeCAD geplant ist, ist es noch nicht verfügbar. In diesem Abschnitt werden einige Arbeitsumgehungen für die Zwischenzeit bis zur Freigabe des Fehlersuchprogramms beschrieben.

Haltepunkte
Die Implementierung von Haltepunkten beinhaltet eine übergeordnete Ebene des Codes, die die Ausführung des in Entwicklung befindlichen Codes verwaltet. Eine solche -Ebene für die Python-Entwicklung innerhalb von FreeCAD ist derzeit nicht verfügbar. Als schwacher Ersatz ist der folgende Code eine Option. Anstatt die Ausführung zu unterbrechen, wird die Ausführung des Codes vollständig gestoppt, indem eine Zahl durch Null geteilt wird. Dies ist wirklich eine sehr schwache Option im Vergleich zu einem richtigen Haltepunkt eines Fehlerdiagnoseprogramms, außerdem ist diese Option nur von Nutzen, wenn sie zusammen mit der im nächsten Abschnitt 'Variablenprüfung' gezeigten Routine verwendet wird.

Breakpoint Code

Konsolen Traceback (Rückverfolgung)

Wenn ein Programm während der Ausführung fehlschlägt, erzeugt Python einen sogenannten Traceback (Rückverfolgung), der die Reihenfolge der Programmausführung auflistet (d.h. welches Programm welches Programm in welcher Reihenfolge aufgerufen hat).

Für das Codebeispiel

erhalten wir den/die folgende(n) Traceback/Rückverfolgung:

Wenn wir den/die Traceback/Rückverfolgung lesen, können wir das feststellen:
 * eine Nachricht von 'Haltepunkt: Verschmelzungsroutine' von dem Haltepunkt gesendet wurde, der die Zeichenkette 'Verschmelzungsroutine' hat
 * der Ausführungsfehler trat in Zeile 28 des Moduls 'myNewMacro' auf
 * die Routine 'myNewMacro' wurde ab Zeile 40 im Modul 'testStub' aufgerufen

Angenommen, die an den Haltepunktaufruf übergebene Zeichenfolge ist aussagekräftig, dann kann die Position des Haltepunkts leicht bestimmt werden. Beachte, dass es sich um ein komplexes System handelt, in dem die Rückverfolgung Dutzende oder sogar Hunderte von Einträgen enthalten kann.

Um mit diesen Haltepunkten produktiv zu werden, fahre mit dem nächsten Abschnitt fort.



Variablenprüfung
Das zweite Hauptmerkmal eines Fehlerdiagnoseprogramms besteht darin, den Inhalt von Variablen zu untersuchen und möglicherweise zu ändern. Noch einmal, bis das FreeCAD-Fehlerdiagnoseprogramm für Python fertig ist, sind wir auf Zwischenlösungen angewiesen.

Ein Merkmal des FreeCAD-Systems ist die Bereitstellung von globalen Variablen. Diese Variablen werden durch den Python-Code erzeugt und existieren im Speicher von FreeCAD, bis der Benutzer FreeCAD verlässt. Die Form dieser Variablen ist:

Die Anweisung erzeugt eine Python-Variable im FreeCAD-Speicher, auf die Python-Code uneingeschränkt zugreifen kann. Tatsächlich verhält sie sich identisch zu einer normalen Python-Variable. Aber nach Beendigung der Ausführung des Python-Codes, unabhängig davon, ob er als Makro oder über die Konsole ausgeführt wird, verbleibt im Speicher eine Variable 'FreeCAD.myVariable' mit dem Wert 123. Eingabe:

erzeugt den Inhalt der Variable auf der Konsole. Dieser Wert verbleibt in FreeCAD, bis er entweder geändert wird oder der Benutzer FreeCAD verlässt. Das bedeutet, dass der Wert vorhanden und für ein nachfolgendes Python Programm zum Lesen verfügbar ist. Er kann jederzeit von der Konsole aus überprüft werden, indem man seinen Namen eingibt. Also ein Programm namens 'Programm A':

kann ausführen und Werte in die globale Variable laden. Später kann ein zweites Programm namens 'Programm B' laufen und den Wert abrufen:

Vermutlich führt 'Programm B' dann Berechnungen mit den in FreeCAD.myVariable verbliebenen Werten durch. Der Benutzer kann jederzeit in die Konsole tippen, um den Inhalt der Variablen zu überprüfen:

Eine wichtige Tatsache, die bei globalen Variablen in FreeCAD beachtet werden muss, ist, dass sie im Speicher existieren und verloren gehen, wenn das Programm beendet wird. Sie werden nicht mit Dokumenten gespeichert, sondern existieren nur im Speicher.

Anwendung
Damit sind wir an einem Punkt angelangt, an dem wir die beiden Schritte zusammenfügen und sie dazu nutzen können, Fehler im Code aufzuspüren. Dies ist etwas umständlich in der Anwendung, aber es ist nur eine Option, bis das FreeCAD-Fehlerdiagnoseprogramm fertig ist.

Es ist wahrscheinlich am einfachsten, es anhand eines Beispiels zu präsentieren, sagen wir, das folgende Programm wird fehlerbereinigt:

Die Ausführung des Programms auf der Konsole ergibt:

was nicht das ist, was wir erwartet haben! Angenommen, wir sind nicht in der Lage, die Fehler zu erkennen, dann können wir unseren unkomplizierten Haltepunkt- und Variablenprüfer wie folgt einsetzen. Wir können eine Zeile einfügen, um den Wert der Variablen, über die wir uns wundern, in eine globale Variable zu kopieren, dann können wir einen Haltepunkt setzen, um die Ausführung dort anzuhalten:

Nun, wenn wir das Programm ausführen, erhalten wir:

Wahrscheinlich sieht es nicht so gut aus, aber was wir jetzt tun können, ist, den Wert der Python Variablen 'temporaryVariable1' zu überprüfen, wie wir ihren Wert der globalen Variablen 'FreeCAD.saveMyVariable' zugewiesen haben:

Wenn wir uns daran erinnern, dass die Variable 'FreeCAD.saveMyVariable' den Wert der Python Variablen 'temporaryVariable1' enthält, können wir jetzt den Fehler im Wert bestimmen und mit der Rückverfolgung beginnen, um festzustellen, woher der Fehler kam. Wenn wir uns 'FreeCAD.saveMyVariable' anschauen, ist es wichtig zu erkennen, dass die Variable 'temporaryVariable1' nicht mehr verfügbar ist - sie wurde vom Python-System weggeholt.

Sobald der Fehler in der Anweisung lokalisiert wurde

und korrigiert auf:

Dann können wir das Programm erneut ausführen und erhalten den Wert '11', was immer noch nicht richtig ist. Wir können mehr Zuweisungen an globale FreeCAD Variablen vornehmen, mehrere Haltepunkte haben (obwohl der erste, der angetroffen wird, die Ausführung stoppt)

Wir haben jetzt zwei Haltepunkte (obwohl einer auskommentiert ist) und zwei globale FreeCAD Variablen in Verwendung. Es gibt keine praktische Begrenzung für die von FreeCAD verfügbaren globalen Variablen, so dass keine unnötigen Einsparungen erforderlich sind. Wir können jetzt auf der Konsole Folgendes erzeugen:

Einige Punkte über die Verwendung der globalen FreeCAD Variablen:
 * Python behandelt diese Variablen identisch zu jeder anderen Python Variablen
 * diese Variablen können jeden Python Datentyp enthalten - alles, was eine reguläre Python Variable enthalten würde
 * diese Variablen können verwendet werden, um den Inhalt einer Python Variablen 'herauszubringen', damit wir sie sehen können
 * auch diese Variablen können verwendet werden, um einer Python Variablen Werte 'zuzuführen', indem ihr Wert von der Konsole aus vor der Ausführung einer Routine oder in einem früheren Python Programm gesetzt wird
 * diese Variablen können verwendet werden, um Daten zwischen zwei Programmen zu übergeben, die zu verschiedenen Zeitpunkten laufen
 * (zu wiederholen) diese Variablen sind nur für die Dauer der FreeCAD Sitzung, sobald der Benutzer FreeCAD verlässt, sind die Variablen verloren



Variablen Beobachter
Es gibt ein Dienstprogramm Global Variable Watcher, um die globalen Variablen von FreeCAD zu überwachen. Es kann den Inhalt einer globalen Variable entweder auf Anfrage oder auf Zeitbasis anzeigen.



Namensraum-Konflikt
Eine Sache, die man beachten muss, ist, dass FreeCAD keine Verwaltung für globale Variablennamen hat, so dass die Möglichkeit besteht, eine Variable des Systems oder eines anderen Stück Codes zu ändern. Folglich ist es eine gute Idee, Ihren Variablen etwas Eindeutiges voranzustellen, wie z.B. den Routinenamen. Um beispielsweise eine Variable aus einer Routine namens 'alpha1' zu verwenden, könnte der globale Name 'FreeCAD.alpha1MyVariable' lauten.

Coding Framework
Bei der Entwicklung von kleinen Teilen des Python-Codes in FreeCAD kann es ausreichen, die Python-Konsole zu verwenden. Mit zunehmender Anzahl von Codezeilen ist es jedoch sinnvoller, diese in einer Datei zu speichern. Python kann in jeder Datei mit der Endung ".py" stehen, FreeCAD bietet jedoch auch einen Mechanismus namens Makro zum Speichern solcher Programme und zur Interaktion mit ihnen (z.B. Bearbeiten, Ausführen). Python in regulären '.py'-Dateien kann manchmal nur von der Python-Konsole aus ausgeführt werden, während Python in der Makro-Datei '.FCMacro' (stets auch) von der FreeCAD-Schnittstelle zur Ausführung von Makros ausgeführt werden kann. Ein Nachteil der FreeCAD-Menüoberfläche ist, dass sie menügeführt ist mit einem Kontrollfenster und kann zu einem gewissen Durcheinander auf der Bildschirmoberfläche führen.

Ein einfacherer Ansatz ist es, den Python Code zu nehmen und ihn nicht aus dem FreeCAD Makro Menü zu starten, sondern aus einer Werkzeugleiste heraus. Eine Python Routine, die mit einer Schaltfläche in einer Symbolleiste verknüpft ist, kann mit einem Klick ausgeführt werden. Da es sich bei den Symbolleisten um schwebende Fenster handelt, wird die Bildschirmanzeige nicht überladen. Wenn das FreeCAD Fenster kleiner als die physische Größe des Bildschirms ist, kann die Symbolleiste außerhalb des FreeCAD Fensters schweben. Dies ist vorteilhaft, wenn Bildschirmschnappschüsse der FreeCAD Anzeige benötigt werden. Außerdem kann die Werkzeugleiste viel kleiner sein als das Makro-Steuerungsfenster, das im Makro Menü von FreeCAD angezeigt wird.

Das Verbinden eines Makros mit einer Schaltfläche auf einer Symbolleiste wird in Wie man Makros installiert und Anpassung der Symbolleisten behandelt. Es kann einige Minuten dauern, ein Makro mit einer Schaltfläche in der Symbolleiste zu verbinden, ein Symbol auszuwählen usw. Dies ist nicht immer erforderlich, da man manchmal einfach nur schnell ein Stück Code ausarbeiten möchte, das dann in einen anderen Code integriert wird. Für diese Situation kann ein Test-Stub vorteilhaft sein. Es gibt keine wirkliche Definition dafür, was ein Test-Stub beinhalten würde, es hängt wirklich von der Person und dem Anwendungsbereich ab. Ein Beispiel ist unten dargestellt:

Dieser Test stub dient auch als Vorlage für Code mit definierten Stellen für die verschiedenen Aspekte eines großen Python Programms. Bei der Ausführung des Teststub Programms wird einfach eine Meldung mit dem Namen des Programms erzeugt und beendet. Bei der Verwendung eines Teststubs wird der geschriebene Hauptzeilencode ganz am Ende der Datei platziert, wobei der Code für die Klassendefinition, Funktionen usw. in den vorherigen Abschnitten platziert wird. Das Template kann einfach an die Situation angepasst werden. Bei einem Programm mit 5 Zeilen ist eine solche Menge an Dokumentation natürlich nicht notwendig.

Indem man eine Schaltfläche permanent auf einer Symbolleiste behält und diesen Button mit dem Test-Stub verknüpft, gibt es immer einen Bereich, in dem man Code schreiben und sofort ausführen kann. Die Ausführung erfolgt unabhängig von der Python-Konsole. Die Ausführung kann auch unabhängig von der Bildschirm-GUI erfolgen. Die Ausgaben des zu entwickelnden Programms erscheinen so, wie sie auf dem Bildschirm erscheinen sollen, ohne weitere Artefakte aus der Programmierumgebung. Die Python-Konsole kann bei Bedarf ausgeblendet werden, um die Anzeigefläche zu vergrößern oder für andere Zwecke zu verwenden. Wenn die Ausführung über die Schaltfläche in der Symbolleiste erfolgt, wird die Konsole nicht benötigt.

Wenn der Code fertig ist, kann er einfach in eine andere Datei kopiert werden und der Test-Stub bleibt bis zum nächsten Mal leer.

Mehrere Code Stücke können unter Verwendung desselben Teststub mit etwas extra Code für die Bereitstellung mehrerer Buttons entwickelt werden, der sich unter PySide Beginner Examples - More Than 2 Buttons befindet.

Mehr PySide Unterstützung

Für weitere Unterstützung bei der Verwendung der PySide GUI gibt es die Seite PySide

Mehr Unterstützung für Python Programmierung

Für weitere Unterstützung bei der Python-Programmierung gibt es ein Makro, das zur Unterstützung bei der Entwicklung von Python-Code geschrieben wurde; es befindet es sich unter Python Assistant Window.

Putting It All Together
Die Bildschirmverwaltung kann eine Herausforderung sein, wenn es darum geht, Code zu entwickeln, der komplexe und detaillierte grafische Ausgaben hat, wie es bei FreeCAD der Fall ist. Das folgende System funktioniert gut:
 * FreeCAD für Konsole, Bericht, GUI-Anzeige
 * Symbolleiste zum Aufruf von in Entwicklung befindlichem Code
 * Externer Editor zum Modifizieren des Codes
 * PAW (Python Assistant Window) zur Unterstützung der Python-Code-Erstellung

Bildschirmmanagement

Wenn der Test stub über eine Symbolleiste bedient wird und ein externer Editor verwendet wird, wird das Fensterlayout auf dem Bildschirm in etwa so aussehen:



"Baum" im Diagramm bezieht sich auf den Combi oder Baum Browser, die Python Konsole und die Report Ansicht sind im unteren Fenster zusammengefasst und über Schaltflächen auswählbar. Durch den gezielten Einsatz der Werkzeuge kann der Entwicklungsstrom optimiert werden, das oben genannte ist nur eine Idee. Der Zuschnitt erfolgt auf einer persönlichen Basis.

Miscellaneous Links
Einige andere Verknüpfungen über IDEs für Python, die von Interesse sein könnten, sind:
 * Vergleich von Python-IDEs für die Entwicklung
 * Die beste Python-IDE auswählen
 * Ihre Entwicklungsumgebung
 * PyCharm Community Edition IDE