file template in python?

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
kkornfield
User
Beiträge: 13
Registriert: Mittwoch 29. Dezember 2021, 08:38

Gibt es eine Empfehlung wie ein Python file aussehen soll?
Vorallem die ersten Zeilen?
Sowas wie:
# -*- coding: utf-8 -*-
""" file name: some analyzuer
Author: Max Mustermann
...
"""
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@kkornfield: Meine Minimalvorlage für Programme sieht so aus:

Code: Alles auswählen

#!/usr/bin/env python3


def main():
    ...


if __name__ == "__main__":
    main()
Die etwas längere Fassung:

Code: Alles auswählen

#!/usr/bin/env python3
"""
Beschreibung was das Programm macht.
"""

__author__ = "Marc 'BlackJack' Rintsch"
__contact__ = "...@..."
__date__ = "2022-08-09"
__version__ = "0.1a"


def main():
    ...


if __name__ == "__main__":
    main()
Ob die Metainformationen im Quelltext Sinn machen, oder besser in einer extra README-Datei stehen, mache ich üblicherweise davon abhängig, ob das Programm/Skript auch ohne zusätzliche Dateien auskommt oder wahrscheinlich verteilt/eingesetzt wird, und ob die Informationen selbst im Programm gebraucht werden. Also beispielsweise wenn das ein Kommandozeilenprogramm ist, das Autor und Version ausgibt, oder zumindest optional ausgeben kann.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Dennis89
User
Beiträge: 1123
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

in der ersten Zeile steht der Shebang, danach folgen alle Importe. Weiter geht es mit der Definition von Konstanten, Klassen und Funktionen.
Das Programm wird aus einer Funktion mit dem Name 'main' gesteuert, diese wird nach den Klassen und Funktionen definiert. Zum Schluss folgt der Einstiegspunkt ist die 'main'-Funktion.

Code: Alles auswählen

#!/usr/bin/env python3

importe

KONSTANTEN

Klassen und/oder Funktionen




def main():
    # Hieraus wird das Program gesteuert.

if __name__ == "__main__":
    main()

Hast du soetwas gesucht?

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Nochwas: die Kodierung ist automatisch utf8 und sollte auch nie etwas anderes sein, so dass der Kodierungskommentar überflüssig ist.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn du dein Programm / Modul öffentlich zur Verfügung stellst und du die Schöpfungshöhe für hoch genug hältst solltest du den Quellcode noch unter eine Lizenz deiner Wahl stellen und die Lizenz in der Datei nennen. "Lizenz" muss ja nichts restriktives sein, sondern eine (sehr) liberale Lizenz wie MIT oder CC0.

Gruß, noisefloor
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Das ist eine gute Frage. Du kannst stets mit einem minimalen Template anfangen und dies dann je nach Anspruch weiter aufbauen. Das meiste wurde hier schon vorgeschlagen. Sinnvoll ist folgender Start:

Code: Alles auswählen

def main():
    # entry point
    # muss nicht 'main' heissen, ist in Anlehnung an C aber oft üblich


if __name__ == "__main__":
    # import switch
    main()


Damit kannst du jedes Programm beginnen und hast ein Template, das zur Vermeidung globaler Variabler beitragen kann. Wenn dein Programm größer wird und weitere Funktionen hat, sowie andere Module importiert, so gehören diese Importe an den Anfang der Datei:

Code: Alles auswählen

import that
import this  # -> easter egg ;)


def more_functions_here():
    ...
    
    
def main():
    # entry point

    
if __name__ == "__main__":
    # import switch
    main()
Soll das Programm direkt von der Kommandozeile ausführbar sein, so brauchst du eine "shebang" Angabe an der ersten(!) Zeile in der Datei, die den Pfad zum gewünschten Python-Interpreter angibt, was zuverlässig aber nur auf dem eigenen System funktioniert, da andere Systeme (d.h. die Rechner anderer Leute) anders eingerichtet sein können. Daher siehst du oft, dass in solchen Fällen der Pfad aus dem Environment bezogen wird (was üblicherweise das System-Python startet):

Code: Alles auswählen

#!/usr/bin/env python3
Auf Systemen, die nur noch Python 3 bereitstellen, kann auch

Code: Alles auswählen

#!/usr/bin/env python
funktionieren. Das solltest du aber zuvor testen, denn es könnte dadurch auch Python 2 gestartet werden – etwas, das nur noch mit legathy-Software gemacht werden sollte.

Eine optionale Kodierungs-Angabe wie

Code: Alles auswählen

# -*- coding: utf-8 -*-
muss gleichfalls am Anfang der Datei stehen. Falls sich dort bereits die shebang Information befindet, dann in der zweiten Zeile – nicht aber umgekehrt!

Die Kodierungs-Angabe war wichtig bei Python 2 Programmen, da der Interpreter ansonsten von einer ascii-Kodierung ausging. Seit Python 3 ist dies utf-8. Daher kann die Kodierungs-Angabe in Python 3 entfallen. Die Datei muss dann aber auch im utf-8 Format abgespeichert werden. Moderne Editoren ermöglichen dies, oftmals ist es sogar bereits die Standard-Einstellung.

Die Meta-Informationen, wie Autor und Lizenz, kannst du dann nach der optionalen shebang Zeile, aber vor den Importen, als Kommentare oder innerhalb eines Dac-Strings ablegen. Sollen diese Informationen automatisch extrahierbar sein, so kannst du dich an __blackjack__s Beispiel orientieren. Das aber eher was für fortgeschrittene und komplexere Anwendungen.
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Wenn man noch einen (oder eher 3-5) Schritt(e) weitergehen möchte, in Richtung Scaffolding ganzer Projekte, gibt es z.B. so etwas wie https://github.com/cookiecutter/cookiecutter
Mir ist das meistens zu viel/zu spezifisch was da herauskommt; andere mögen es.
Antworten