Jaki jest wspólny format nagłówka plików Pythona?

Natknąłem się na następujący format nagłówków dla plików źródłowych Pythona w dokumencie o wytycznych dotyczących kodowania Pythona:

#!/usr/bin/env python

"""Foobar.py: Description of what foobar does."""

__author__      = "Barack Obama"
__copyright__   = "Copyright 2009, Planet Earth"

Czy jest to standardowy format nagłówków w świecie Pythona? Jakie inne pola/informacje mogę umieścić w nagłówku? Guru Pythona podziel się swoimi wytycznymi dotyczącymi dobrych nagłówków źródłowych Pythona: -)

Author: Martin Thoma, 2009-10-06

4 answers

Jego wszystkie metadane dla Foobar modułu.

Pierwszy z nich to docstring modułu, który jest już wyjaśniony w odpowiedzi Piotra.

Jak zorganizować moje Moduły (pliki źródłowe)? (Archiwum)

Pierwsza linia KAŻDEGO pliku powinna być #!/usr/bin/env python. Umożliwia to uruchomienie pliku jako skryptu wywołującego interpreter w sposób niejawny, np. w kontekście CGI.

następny powinien być docstring z opis. Jeśli opis jest długi, pierwsza linia powinna być krótkim podsumowaniem, które ma sens samo w sobie, oddzielonym od reszty znakiem nowego wiersza.

Cały kod, łącznie z instrukcjami importu, powinien być zgodny z docstringiem. W Przeciwnym Razie docstring nie zostanie rozpoznany przez interpretera i nie będziesz miał do niego dostępu w sesjach interaktywnych (np. poprzez obj.__doc__) lub podczas generowania dokumentacji za pomocą zautomatyzowanych narzędzi.

Import najpierw wbudowane moduły, następnie Moduły innych firm, a następnie wszelkie zmiany ścieżki i własnych modułów. szczególnie, dodatki do ścieżek i nazwy modułów mogą się szybko zmienić: utrzymywanie ich w jednym miejscu ułatwia ich znalezienie.

Następna powinna być informacja o autorstwie. Informacje te powinny być zgodne z następującym formatem:

__author__ = "Rob Knight, Gavin Huttley, and Peter Maxwell"
__copyright__ = "Copyright 2007, The Cogent Project"
__credits__ = ["Rob Knight", "Peter Maxwell", "Gavin Huttley",
                    "Matthew Wakefield"]
__license__ = "GPL"
__version__ = "1.0.1"
__maintainer__ = "Rob Knight"
__email__ = "[email protected]"
__status__ = "Production"

Status powinien być zazwyczaj jednym z "prototyp", "rozwój", lub "produkcja". __maintainer__ powinno być osoba, która naprawi błędy i wprowadzi ulepszenia w przypadku importu. __credits__ różni się od __author__ tym, że __credits__ obejmuje osoby, które zgłaszały poprawki błędów, zgłaszały sugestie itp. ale nie napisał kodu.

Tutaj masz więcej informacji, lista __author__, __authors__, __contact__, __copyright__, __license__, __deprecated__, __date__ i __version__ jako uznane metadane.

 465
Author: Esteban Küber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:30

Zdecydowanie popieram Minimalne nagłówki plików, przez co mam na myśli tylko:

  • linia hashbang (#!) jeśli jest to skrypt wykonywalny
  • Moduł docstring
  • Import, pogrupowany zgodnie z opisem w odpowiedzi voyager .
Wszystko inne jest stratą czasu, przestrzeni wizualnej i aktywnie wprowadza w błąd.

Jeśli masz zastrzeżenia prawne lub informacje dotyczące licencji, trafiają one do osobnego pliku. Nie musi zainfekować KAŻDEGO pliku kodu źródłowego. Twoje prawa autorskie powinno być częścią tego. Ludzie powinni być w stanie znaleźć go w Twoim pliku LICENSE, a nie w losowym kodzie źródłowym.

Metadane, takie jak autorstwo i Daty, są już utrzymywane przez kontrolę źródła. Nie ma potrzeby dodawania mniej szczegółowej, błędnej i nieaktualnej wersji tych samych informacji w samym pliku.

Nie wierzę, że są jakieś inne dane, które każdy musi umieścić we wszystkich swoich plikach źródłowych. Możesz mieć jakiś szczególny wymóg, aby to zrobić, ale takie rzeczy mają zastosowanie, przez definicja, tylko dla Ciebie. Nie mają miejsca w "nagłówkach ogólnych polecanych wszystkim".

 126
Author: Jonathan Hartley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-04 14:42:09

Zobacz także PEP 263 Jeśli używasz zestawu znaków spoza ascii

Streszczenie

Ten PEP proponuje wprowadzenie składni deklarującej kodowanie plik źródłowy Pythona. Informacje o kodowaniu są następnie wykorzystywane przez Python parser do interpretacji pliku przy użyciu podanego kodowania. Najbardziej szczególnie poprawia to interpretację literałów Unicode w kod źródłowy i umożliwia pisanie literałów Unicode używając np. UTF-8 bezpośrednio w edytorze Unicode aware.

Problem

W Pythonie 2.1 literały Unicode mogą być pisane tylko przy użyciu Kodowanie oparte na Latin-1 "unicode-escape". To sprawia, że środowisko programistyczne raczej nieprzyjazne dla Użytkowników Pythona, którzy żyją i pracować w nie-łacińskich-1 lokalizacjach, takich jak wiele azjatyckich krajów. Programiści mogą pisać swoje 8-bitowe ciągi za pomocą ulubione kodowanie, ale są powiązane z kodowaniem" unicode-escape" dla Unicode literały.

Proponowane Rozwiązanie

Proponuję aby kod źródłowy Pythona był widoczny i możliwość zmiany na podstawie pliku źródłowego za pomocą specjalnego komentarza na górze pliku, aby zadeklarować kodowanie.

Aby uczynić Pythona świadomym tej deklaracji kodowania szereg zmiany koncepcji są niezbędne w odniesieniu do obsługi Dane kodu źródłowego Pythona.

Definiowanie kodowania

Python będzie domyślnie do ASCII jako standardowego kodowania, jeśli nie ma innych podane są wskazówki dotyczące kodowania.

Aby zdefiniować kodowanie kodu źródłowego, magiczny komentarz musi być umieszczone w plikach źródłowych jako pierwsze lub drugie wiersz w pliku, np.:

      # coding=<encoding name>

Lub (przy użyciu formatów rozpoznawanych przez popularne edytory)

      #!/usr/bin/python
      # -*- coding: <encoding name> -*-

Lub

      #!/usr/bin/python
      # vim: set fileencoding=<encoding name> :

...

 18
Author: John La Rooy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-18 02:06:55

Powyższe odpowiedzi są naprawdę kompletne, ale jeśli chcesz mieć szybki i brudny nagłówek do kopiowania i wklejania, użyj tego:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""Module documentation goes here
   and here
   and ...
"""

Dlaczego to jest dobre:

  • pierwsza linia jest dla użytkowników *nix. Wybierze interpreter Pythona w ścieżce użytkownika, więc automatycznie wybierze preferowany przez użytkownika interpreter.
  • drugi to kodowanie plików. Obecnie każdy plik musi mieć kodowanie powiązane. UTF-8 będzie działać wszędzie. Tylko starsze projekty wykorzystywałyby inne kodowanie.
  • i bardzo prosta dokumentacja. Może wypełnić wiele linii.

Zobacz też: https://www.python.org/dev/peps/pep-0263/

Jeśli po prostu napiszesz klasę w każdym pliku, nie potrzebujesz nawet dokumentacji (byłaby ona wewnątrz klasy doc).

 14
Author: neves,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-04 14:13:50