Skip to content

Einrichtung von PyCharm und Smarthome.py

umatz edited this page Feb 10, 2014 · 3 revisions

#Einleitung

Dieses kleine Tutorial zum Einrichten von PyCharm richtet sich an alle, die Plugins für Smarthome.py entwickeln und testen wollen. PyCharm bietet die Möglichkeit nicht nur das eigene, sondern auch das komplette sh.py-Framework zu debuggen. An dieser Stelle ein paar Highlights von PyCharm:

  • Remote-Debugging
  • Intellisense
  • Terminal-Support
  • Integration von mehreren Versionskontroll-Systemen (Github, SVN, ...)

Die folgende Anleitung bezieht sich auf die Installation von PyCharm (Professional Edition) auf einem Linux-System. Prinzipiell sollten die meisten Schritte / Funktionen auch auf Windows- und Mac OS Systemen funktionieren. Achtung: das hier beschriebene remote debugging funktioniert nur mit der Professional Edition von PyCharm!

#Installation

Ladet euch die aktuellste Version von der Jetbrains-Website herunter (Stand 2014-02-07: Version 3.1). Kopiert die heruntergeladene Datei (Stand 2014-02-07: pycharm-professional-3.1.tar.gz) an den Ort, an dem ihr PyCharm installieren wollt. In dieser Beispielinstallation wählen wir das Home-Verzeichnis des Nutzers.

cp ~/Downloads/pycharm-professional-3.1.tar.gz ~/.

Datei entpacken:

tar xfz ~/pycharm-professional-3.1.tar.gz

Wir wechseln in das PyCharm-Verzeichnis und starten PyCharm:

cd ~/pycharm/bin

./pycharm.sh

#Einrichten des Projekts Smarthome.py

Auf das Erstellen eines Forks von Smarthome.py möchte ich an dieser Stelle nicht detaillierter Eingehen und verweise stattdessen auf folgende Seite:

https://github.com/mknx/smarthome/tree/master/dev

Einrichtung Workspace

Befindet sich das komplette Projekt in dem entsprechenden Ordner, öffnen wir über File - Open Directory das entsprechende Verzeichnis. PyCharm erstellt nun ein paar Schattendateien, um den Project-Workspace zu verwalten. Unter anderem wird ein .idea - Verzeichnis erstellt, in dem alle späteren Konfigurationen des Projekts gespeichert werden. An dieser Stelle sollte man nicht vergessen, dieses Verzeichnis in der Versionsverwaltung von Github auf 'Ignore' zu stellen. Ich persönlich verwende unter Linux SmartGit, um Github-Projekte zu verwalten.

Einrichten des Remote-Debuggers

Eine der Funktionalitäten die eigentlich jeder Entwickler braucht ist ein ordentlicher Debugger. Smarthome.py läuft jedoch bei den allermeisten nicht auf dem Entwicklungsrechner, sondern auf einer dedizierten Plattform, in meinem Fall dem RaspberryPi. Für solche Fälle stellt PyCharm eine sehr ordentliche Remote-Debugging-Fähigkeit zur Verfügung. Diesen stellen wir unter File - Settings ein. Es öffnet sich ein neues Fenster, indem wir die Projekt- und IDE-Einstellungen wählen können. Unter Project Settings befindet sich der Punkt Project Interpreter.

Project Settings

Dort wählen wir auf der rechten Seite Configure Interpreter. Über das grüne Plus-Symbol fügen wir dem Projekt einen neuen Debugger hinzu; aus der Liste wählen wir Remote... In dem sich öffnendem Fenster müsst ihr nun die Verbindungsdaten eures Gerätes eingeben, auf dem Smarthome.py läuft. Bitte beachtet, das in dem Feld Python Interpreter Path folgender Pfad eingetragen ist:

/usr/bin/python3

Remote-Debugger Einstellungen

PyCharm verbindet sich nun mit eurem Gerät und konfiguriert das Projekt. Die anschließende Frage, ob wir den Interpreter als Standard benutzen wollen, bejahen wir durch einen Klick auf 'Ok'. Euer Python3-Interpreter sollte nun eingerichtet und folgendermaßen eingetragen sein:

Nachdem der Remote-Debugger für das Projekt gesetzt ist, müssen wir ihn konfigureren. Dazu öffnen wir unter Run - Edit Configurations... die entsprechende Einstellungsseite. Über das grüne Plus-Symbol fügen wir unter dem Punkt Remote Debug die entsprechende Einstellung hinzu. Auf der rechten Seite konfigurieren wir nun den Debug-Listener und vergeben einen Namen, die lokale IP-Adresse des Entwicklungsrechners (nicht die IP des Gerätes auf dem Samrthome.py läuft) und einen freien Port. Es sollte ungefähr so aussehen:

Unter dem Punkt Path mappings müssen wir noch die lokalen Codepfade auf ihre Pendants auf dem Remote-Gerät setzen. Auch hier lässt sich über das Plus-Symbol ein entsprechender Eintrag hinzufügen. Unter Local path setzen wir den Pfad zu unserem lokalen Smarthome.py-Project (in meinem Fall /home/pfischi/PycharmProjects/Smarthome; der Remote path ist /usr/smarthome. Hier der entsprechende Screenshot:

Als nächstes muss das PyCharm-Debugger-Package auf das Smarthome.py-Gerät. Wie immer sind folgende Beispiele bezogen auf meinen Raspberry Pi. Wir wechseln in das PyCharm-Installationsverzeichnis und kopieren die Datei pycharm-debug-py3k.egg auf den Pi.

cd ~/pycharm scp pycharm-debug-py3k.egg [email protected]:/tmp

Bitte hier beachten: im gleichen Verzeichnis liegt eine pycharm-debug.egg, diese funktioniert nur mit Pyhon2.

Wir verbinden uns mit

ssh [email protected]

auf den Raspberry Pi und kopieren pycharm-debug-py3k.egg in den Distribution-Ornder von Python3:

sudo cp /tmp/pycharm-debug-py3k.egg /usr/lib/python3/dist-packages/

Als nächstes müssen wir noch den Pfad der Umgebungsvariablen PYTHONPATH zuweisen. Auch hier gehe ich explizit auf den Raspberry Pi und das SmartHome.py-Image ein, für andere Systeme hilft Mr. Google weiter. Um die PYTHONPATH-Variable zu setzen sind folgende Schritte nötig:

sudo su - nano /etc/profile.d/smarthome.sh

Wir fügen folgende Zeile hinzu:

export PYTHONPATH="/usr/lib/python3/dist-packages/pycharm-debug-py3k.egg"

Nach dem Speichern und Schliessen der Datei starten wir den Pi neu, um die Änderung zu übernehmen

sudo reboot

Mit diesen Vorbereitungen ist der Remote-Debugger auf dem Pi installiert und in PyCharm konfiguriert.

Anpassung Code für Remote-Debugging

Damit wir unseren Code nun auch remote debuggen können, müssen wir nur noch zwei Zeilen Code in die init.py-Datei (oder auch jede andere Projektdatei) einfügen. Python weisen wir mit nachfolgender Zeile an, das PyCarm-Debugger_Package zu laden:

import pydevd

An die Stelle, an dem der Remote-Debugger sich im Code verbinden soll, kopieren wir die Zeile:

pydevd.settrace('192.168.178.44', port=12000, stdoutToServer=True, stderrToServer=True)

Die Werte IP und Port müssen an eure Werte angepasst werden, die ihr beim Einstellen des Remote-Debuggers verwendet habt. An dieser Stelle auch hier nochmal der Hinweis: die IP-Adresse und der Port beziehen sich auf den Listener auf eurem Entwicklungsrechner.

Nun kann man über Run - Debug... den Remote-Debugger starten. Im Konsolenfenster von PyCharm sollte nun der Debug-Server laufen und auf ankommende Verbindungen warten.

Nachdem man nun den aktuellen Quellcode auf den Pi geladen hat (Anleitung folgt) kann man nun Smarthome.py neu starten.

smarthome.py -s

smarthome.py -d

Sobald euer Code geladen wird, sollte nun das Programm innerhalb von PyCharm gestoppt werden und ihr könnt nun schrittweise debuggen.

more to come ...