Seite 1 von 1

file template in python?

Verfasst: Dienstag 9. August 2022, 10:58
von kkornfield
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
...
"""

Re: file template in python?

Verfasst: Dienstag 9. August 2022, 12:14
von __blackjack__
@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.

Re: file template in python?

Verfasst: Dienstag 9. August 2022, 12:16
von Dennis89
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

Re: file template in python?

Verfasst: Dienstag 9. August 2022, 13:33
von Sirius3
Nochwas: die Kodierung ist automatisch utf8 und sollte auch nie etwas anderes sein, so dass der Kodierungskommentar überflüssig ist.

Re: file template in python?

Verfasst: Dienstag 9. August 2022, 16:29
von noisefloor
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

Re: file template in python?

Verfasst: Mittwoch 10. August 2022, 09:31
von kbr
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.

Re: file template in python?

Verfasst: Mittwoch 10. August 2022, 12:28
von nezzcarth
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.