Editoren für Python

Gute Links und Tutorials könnt ihr hier posten.
bremer
User
Beiträge: 109
Registriert: Sonntag 25. Mai 2008, 00:13

Thx, hab's hinzugefügt.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Hallo,
hier wird ein PHP-Editor vorgestellt, dessen Fähigkeit, automatisch Docstrings zu erzeugen, beeindruckt hat. Kann denn irgendeiner der euch bekannten Editoren sowas?
..was ich sonst noch ganz nützlich fände:

* Bei Erstellen einer Klasse gleich das __init__, __str__ erstellen
* Dokumentationsintegration (wenn ich mich mit dem Cursor auf os.path.join(blah, blubb) befinde, soll die Syntax der Funktion plus Erklärung usw zB in der Statusbar dargestellt werden (am besten auch noch für Fremdmodule))


Zur Zeit nutze ich Geany, der *wirklich genial* ist (schnell, Code-Vervollständigung, automatisches Ausführen per Knopfdruck (Terminal!), super Syntax-Highlighting, unterstützt auch andere Sprachen (gut für z.B. Webentwicklung wg. Jinja/HTML/CSS),...).
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dauerbaustelle hat geschrieben:hier wird ein PHP-Editor vorgestellt, dessen Fähigkeit, automatisch Docstrings zu erzeugen, beeindruckt hat. Kann denn irgendeiner der euch bekannten Editoren sowas?
..was ich sonst noch ganz nützlich fände:

* Bei Erstellen einer Klasse gleich das __init__, __str__ erstellen
Also wenn ich Flash hätte, könnte ich dir vielleicht folgen. Habe ich aber nicht und auch nicht die Zeit mir das Ding anzusehen, daher die Frage: wie meinst du das?

Ansonsten kann ich mir mit snippetsEmu durchaus auch Klassen mit ``__init__`` und ``__str__`` generieren lassen. Tue ich aber nicht weil ich die magischen Funktionen nur dann definiere wenn ich sie brauche und nicht einfach so, pauschal.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Leonidas hat geschrieben:daher die Frage: wie meinst du das?
Nunja, mal angenommen ich definiere eine Methode `do_blah`:

Code: Alles auswählen

def do_blah(foo, bar, **blubb):
    pass
und jetzt fange ich an, vor dem `pass` Docstrings zu definieren (ich tippe `"""` ein), der Editor ergänzt diese automatisch:

Code: Alles auswählen

def do_blah(foo, bar, **blubb):
    """
        @param foo:
        @param bar:
        @param blubb:
    """
    pass
weischdu.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ah, ok. Ne, das kann vim nicht. Das könnte vielleicht Emacs python-mode, wenn man es implementiert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

So etwas würde ich nicht haben wollen. Ähnlich wie Leonidas Argument zu automatischem `__str__()`, gibt's auch viele Funktionen wo eine kurze Beschreibung der Funktion selbst ausreicht und die Argumente durch die Namen schon genau genug beschrieben sind, so dass man sie nicht noch einmal alle explizit einzeln beschreiben muss.

Das führt letztendlich oft zu so toller Dokumentation wie:

Code: Alles auswählen

def do_blah(foo, bar, **blubb):
   """
       @param foo: a foo object.
       @param bar: a bar object.
       @param blubb: some blubbs.
   """
   pass
Das ist IMHO fast schlimmer als gar keine Dokumentation.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Leonidas hat geschrieben:Ah, ok. Ne, das kann vim nicht. Das könnte vielleicht Emacs python-mode, wenn man es implementiert.
Na wenn du sowieso snippetsEmu benutzt, bekommst du das bei `def<tab>' auch spendiert ;) Sogar `self-aware' (d.h. sself wird nicht in die Argument-Liste aufgenommen ;))

Aber BlackJacks Einwand sollte man sich doch zu Herzen nehmen ;) Wobei das ganz nützlich ist, wenn man API Dokumentation aus dem Code erstellt.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

@BlackJack: Wenn ich `"""` unter der Methodendefintion tippe, dann habe ich höchstwahrscheinlich vor, Dokumentation zu schreiben. Und wenn schon Doku, dann auch für alle Paramater.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dauerbaustelle hat geschrieben:@BlackJack: Wenn ich `"""` unter der Methodendefintion tippe, dann habe ich höchstwahrscheinlich vor, Dokumentation zu schreiben. Und wenn schon Doku, dann auch für alle Paramater.
Nein, wieso?

Code: Alles auswählen

def primes_to(n):
    """Returns all prime numbers from 0 to n"""
    pass
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Das Video zeigt Aptanas Eclipse-basierte PHP-IDE. Aus Sicht eines Java-Entwicklers sieht man dort nichts, was gute Java-IDEs nicht schon seit vielen Jahren können und was IMHO eine IDE eigentlich ausmacht: Ein intimes Verständnis der Struktur des Programms und der Typisierung der einzelnen Ausdrücke und darauf basierende Hilfen im Editor.

So etwas ist in einer statisch getypten Sprache wie Java natürlich einfacher als in einer dynamisch getypten wie PHP oder eben auch Python, aber würde man sich etwas mehr Mühe geben, könnte es auch besser sein als die aktuelle Situation, wo man eigentlich kaum mehr hat, als ein Texteditor mit Syntaxhighlighting.

Aptana hat übrigens auch den Entwickler von pydev, einem Python-Plugin für Eclipse, angestellt und bietet auch Python-Support in ihrem Studio-Produkt. Das Ding ist aber primitiver im Vergleich zu dem, was sie da jetzt für PHP demonstrieren. Pydev wäre aber open source und man könnte wahrscheinlich im Eclipse JDT oder PDT nachschauen, wie das automatische Erzeugen der Doc-Kommentare funktioniert und auf die selbe Weise dann in Pydev einen docstring bauen.

Leider ist es in Eclipse sehr aufwendig, einige Plugins für neue Sprachen zu bauen, sodass ein gutes Python-System ein mehrmonatiges Projekt wäre und nicht nur eine interessante Aufgabe für ein Wochenende :( Leider sind daher auch 80% aller Plugins Müll und man muss sich seinen eigenen IDE-Flickenteppich zusammennähen.

Möglicherweise wäre es einfacher, sich wirklich mal in einen der generischen Editoren wie Emacs oder Vim einzuarbeiten. Leider haben beide auf Grund ihres Alters inzwischen eher ungewöhnliche Tastenkombinationen und speziell der Emacs wirkt auf mich in der Grundkonfiguration sehr archaisch.

Stefan
lunar

sma hat geschrieben:So etwas ist in einer statisch getypten Sprache wie Java natürlich einfacher als in einer dynamisch getypten wie PHP
PHP ist ja eigentlich gar nicht typsicher ;)

Und zumindest meiner Erfahrung nach ist die Autovervollständigung, die gängige PHP-Plugins für Eclipse bieten, auch nicht besser als die, die Pydev und Eric 4 für Python bieten. Allerdings habe ich auch nur die freien Plugins getestet, Aptana-Studio kenne ich nicht.
Möglicherweise wäre es einfacher, sich wirklich mal in einen der generischen Editoren wie Emacs oder Vim einzuarbeiten. Leider haben beide auf Grund ihres Alters inzwischen eher ungewöhnliche Tastenkombinationen und speziell der Emacs wirkt auf mich in der Grundkonfiguration sehr archaisch.
Du könntest ja auch einfach eine existierende Konfiguration übernehmen. Ich würde dir auch meine Konfiguration geben, aber da ich nicht so wirklich auf IDE-Automatismen stehe, wird sie dir eher nicht helfen.

Zumindest die geforderten Dinge wie automatische Docstring- und Klassen Templates lassen sich mit yasnippet für Emacs umsetzen, und die mittels ElDoc kann man sich im Minibuffer (~ Statuszeile von Emacs) auch die Docstring-Dokumentation zum aktuellen Objekt anzeigen lassen. Wie gut das funktioniert? Keine Ahnung, ich habe es zwar aktiviert, achte da aber nicht allzu groß drauf, da ich die Doku meistens im Browser bzw. in IPython beim Ausprobieren lese.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Leonidas hat geschrieben:
Dauerbaustelle hat geschrieben:@BlackJack: Wenn ich `"""` unter der Methodendefintion tippe, dann habe ich höchstwahrscheinlich vor, Dokumentation zu schreiben. Und wenn schon Doku, dann auch für alle Paramater.
Nein, wieso?

Code: Alles auswählen

def primes_to(n):
    """Returns all prime numbers from 0 to n"""
    pass
Doch, sowas wäre interessant wenn man zb mit doxygen eine dokumentation automatisch erstellen lassen will. Da braucht man zb die @param Symbole
lunar

Nein, es braucht diese meist idiotischen Markup-Konstrukte nicht (und nein, auch nicht für Doxygen). Denn wo genau läge denn der Mehrwert an Dokumentation, wenn unter "Returns all primes from 0 to n" noch mal "@param n the number, up to which all primes are returned" stünde? Genau, es gibt keinen Mehrwert. Und daran ändert auch fancy doxygen nichts ;) Fazit: Wenn der Fließtext alle relevanten Informationen enthält, dann braucht es kein komisches Markup für Dokumentationstool XYZ, das nimmt dann nämlich nur Platz im Browser weg, der besser hätte genutzt werden können. Zumal die aus solchen Platzhaltern resultierende Dokumentation in der Realität nämlich meist exakt so aussagekräftig ist wie die in BlackJacks Beispiel ;)

Im Übrigen ist Doxygen eh ungeeignet für Python, und der Sinn aus Docstrings generierter API-Dokumentation auch eher fraglich. "pydoc -p 9000" birgt nämlich exakt den gleichen Informationswert.

Dann schon lieber Sphinx, wo man geschriebene Dokumentation (die imho sowieso mehr bringt als API-Doc) mit API-Dokumentation kombinieren kann.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

burli hat geschrieben:Doch, sowas wäre interessant wenn man zb mit doxygen eine dokumentation automatisch erstellen lassen will. Da braucht man zb die @param Symbole
Doxygen-Dokumentation liest sich jämmerlich, siehe auch z.B. python-openid, das EPyDoc verwendet. Da ist mir eine Sphinx-Dokumentation tausend mal lieber auch wenn nicht jeder Parameter mit so Weisheiten wie "n: a number" dokumentiert ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Hm, eigentlich dachte ich, ist dieser Thread nicht zur Grundsatzdiskussion da.
linopolus
User
Beiträge: 5
Registriert: Samstag 23. Mai 2009, 20:55
Wohnort: /home/linopolus

Waere es moeglich, alle IDEs und Editoren in einem festgelegtem Layout im ersten Post reinzuschreiben? 16 Seiten und die haelfte davon irgendwelche Diskussionen statt editoren sind unschoen und man brauch laenger und es ist unuebersichtlicher.
Gruss, linopolus
BlackJack

Das wäre vielleicht eher etwas für's Wiki!?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Definitiv was fürs Wiki.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
linopolus
User
Beiträge: 5
Registriert: Samstag 23. Mai 2009, 20:55
Wohnort: /home/linopolus

Dann versuche ich mich mal daran. Habe jetzt 3 Tage IDEs ausprobiert, die nach mir sollens leichter haben. Aber helft mir bitte :)

So hab mal ne grobe Struktur fertiggestellt: [wiki]IDEs_und_Editoren_für_Python[/wiki]
Verbesserungsvorschlaege?
Gruss, linopolus
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich fände die folgenden Fragen beantwortenswert:

* Unter welchem/n Betriebssysteme(n) läuft die IDE?
* Welche Python-Versionen (1.x, 2.x oder 3.x) werden unterstützt? Was ist mit Jython oder IronPython?
* Gibt es einen Debugger? Was kann er (Einzelschritt, Breakpoints, Variablen, Threads, usw.)? Gibt es einen Remote-Debugger?
* Welche Dateitypen werden neben .py-Dateien noch unterstützt?
* Welche SCMs (SVN, Git, usw.) sind integriert? Welche Funktionen (commit, diff, log, merge, create patch, usw.)?
* Gibt es eine interaktive Konsole? Hat sie eine Historie, kann sie Code automatisch nachladen?
* Gibt es Support für Django (oder ein anderes Rahmenwerk)? Kann ich ein Projekt per Kopfdruck erstellen, die Datenbank per Knopfdruck migrieren, den Entwicklungsserver per Knopfdruck starten?
* Was für eine Code-Completion bietet der Editor?
* Wie zeigt er Dokumentation an?
* Was für Refactorings unterstützt er?
* Gibt es eine Syntaxprüfung während der Eingabe?
* Unterstützt er PEP-8 und warnt bei Abweichungen während der Eingabe?
* Gibt es semantisches oder nur syntaktisches Highlighting?
* Gibt es eine Projektverwaltung?
* Gibt es einen Klassenbrowser?
* Gibt es Support für virtualenv, easy_install oder ähnliches?
* Gibt es Support zum Erstellen von Eggs?
* Was ist mit einer Integration von pypi.python.org?

Stefan
Antworten