[python] 파이썬 파일의 일반적인 헤더 형식은 무엇입니까?

Python 코딩 지침에 대한 문서에서 Python 소스 파일에 대한 다음 헤더 형식을 발견했습니다.

#!/usr/bin/env python

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

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

이것이 파이썬 세계에서 표준 헤더 형식입니까? 헤더에 어떤 다른 필드 / 정보를 넣을 수 있습니까? 파이썬 전문가들은 훌륭한 파이썬 소스 헤더에 대한 지침을 공유합니다 🙂



답변

Foobar모듈 의 모든 메타 데이터입니다 .

첫 번째 docstring모듈은 Peter의 답변 에서 이미 설명한 모듈 입니다.

모듈 (소스 파일)을 어떻게 구성합니까? (아카이브)

각 파일의 첫 줄은 다음과 같습니다 #!/usr/bin/env python. 이를 통해 파일을 인터프리터를 암시 적으로 호출하는 스크립트 (예 : CGI 컨텍스트)로 스크립트로 실행할 수 있습니다.

다음은 설명이있는 docstring이어야합니다. 설명이 길면 첫 번째 줄은 그 자체로 이해하기 쉬운 짧은 요약이어야하며 나머지 줄은 줄 바꿈으로 구분해야합니다.

import 문을 포함한 모든 코드는 docstring을 따라야합니다. 그렇지 않으면 인터프리터가 docstring을 인식하지 못하므로 대화식 세션 (예 :)에서 obj.__doc__또는 자동화 된 도구로 문서를 생성 할 때 해당 docstring에 액세스 할 수 없습니다 .

내장 모듈을 먼저 가져온 다음 타사 모듈을 가져온 다음 경로 및 자신의 모듈을 변경하십시오. 특히, 모듈의 경로와 이름에 대한 추가 사항은 빠르게 변경 될 수 있습니다. 한 곳에서 유지하면 쉽게 찾을 수 있습니다.

다음은 저작자 정보입니다. 이 정보는 다음 형식을 따라야합니다.

__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__ = "rob@spot.colorado.edu"
__status__ = "Production"

상태는 일반적으로 “프로토 타입”, “개발”또는 “생산”중 하나 여야합니다. __maintainer__버그를 수정하고 가져올 경우 개선 할 사람이어야합니다. 버그 수정, 제안 등을보고했지만 실제로 코드를 작성하지 않은 사람들을 포함 한다는 __credits__점에서 다릅니다 .__author____credits__

여기에서 당신은 목록 자세한 내용을 __author__, __authors__, __contact__, __copyright__, __license__, __deprecated__, __date____version__같은 인식 메타 데이터를.


답변

최소한의 파일 헤더를 강력하게 선호합니다.

  • #!실행 가능한 스크립트 인 경우 해시 뱅 ( 행)
  • 모듈 docstring
  • 표준 방식으로 그룹화 된 수입품 : 예 :
  import os    # standard library
  import sys

  import requests  # 3rd party packages

  import mypackage.mymodule  # local source
  import mypackage.myothermodule  

즉. 세 그룹의 수입 그룹 사이에 빈 줄이 하나 있습니다. 각 그룹 내에서 가져 오기가 정렬됩니다. 로컬 소스에서 가져 오는 최종 그룹은 표시된대로 절대 가져 오기이거나 명시 적 상대 가져 오기 일 수 있습니다.

다른 모든 것들은 시간 낭비, 시각적 공간이며, 오해의 소지가 있습니다.

법적 고지 사항이나 라이센스 정보가있는 경우 별도의 파일로 이동합니다. 모든 소스 코드 파일을 감염시킬 필요는 없습니다. 귀하의 저작권은 이것의 일부 여야합니다. 사람들은 LICENSE무작위 소스 코드가 아니라 파일 에서 찾을 수 있어야 합니다.

저작권 및 날짜와 같은 메타 데이터는 이미 소스 컨트롤에서 유지 관리합니다. 파일 자체에 동일한 정보의 상세하지 않고 잘못된 최신 버전을 추가 할 필요가 없습니다.

모든 사람이 모든 소스 파일에 넣어야하는 다른 데이터는 없다고 생각합니다. 특정 요구 사항이있을 수 있지만 그러한 정의는 정의에 따라 귀하에게만 적용됩니다. “모든 사람에게 권장되는 일반 헤더”에는 자리가 없습니다.


답변

위의 답변은 실제로 완전하지만 빠르고 더티 헤더를 복사하여 붙여 넣기하려면 다음을 사용하십시오.

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

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

이것이 좋은 이유는 무엇입니까?

  • 첫 번째 줄은 * nix 사용자를위한 것입니다. 사용자 경로에서 Python 인터프리터를 선택하므로 사용자가 선호하는 인터프리터를 자동으로 선택합니다.
  • 두 번째는 파일 인코딩입니다. 요즘 모든 파일에는 관련 인코딩이 있어야합니다. UTF-8은 모든 곳에서 작동합니다. 레거시 프로젝트는 다른 인코딩을 사용합니다.
  • 그리고 매우 간단한 문서. 여러 줄을 채울 수 있습니다.

참조 : https://www.python.org/dev/peps/pep-0263/

각 파일에 클래스를 작성하면 문서가 필요하지 않습니다 (클래스 doc 내부에 있음).


답변

ASCII가 아닌 문자 집합을 사용하는 경우 PEP 263 도 참조하십시오.

요약

이 PEP는 파이썬 소스 파일의 인코딩을 선언하는 구문을 소개합니다. 그런 다음 주어진 정보를 사용하여 파일을 해석하기 위해 Python 파서에서 인코딩 정보를 사용합니다. 특히 이것은 소스 코드에서 유니 코드 리터럴의 해석을 향상시키고 유니 코드 인식 편집기에서 UTF-8을 사용하여 유니 코드 리터럴을 직접 작성할 수있게합니다.

문제

Python 2.1에서 유니 코드 리터럴은 라틴 -1 기반 인코딩 “unicode-escape”를 사용해서 만 작성할 수 있습니다. 이로 인해 많은 아시아 국가와 같은 비 라틴 -1 지역에서 거주하고 일하는 Python 사용자에게는 프로그래밍 환경이 다소 우호적이지 않습니다. 프로그래머는 선호하는 인코딩을 사용하여 8 비트 문자열을 작성할 수 있지만 유니 코드 리터럴의 경우 “유니 코드 이스케이프”인코딩에 바인딩됩니다.

제안 된 해결책

필자는 파일 상단의 특수 주석을 사용하여 인코딩을 선언하여 소스별로 파일마다 파이썬 소스 코드 인코딩을 표시하고 변경할 수 있도록 제안합니다.

Python이이 인코딩 선언을 인식하게하려면 Python 소스 코드 데이터 처리와 관련하여 많은 개념 변경이 필요합니다.

인코딩 정의

다른 인코딩 힌트가 제공되지 않으면 Python은 기본적으로 표준 인코딩으로 ASCII를 사용합니다.

소스 코드 인코딩을 정의하려면 다음과 같이 매직 주석을 파일의 첫 번째 또는 두 번째 행으로 소스 파일에 배치해야합니다.

      # coding=<encoding name>

또는 (인기있는 편집자가 인식 한 형식 사용)

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

또는

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


답변