Pytype은 유형 주석을 요구하지 않고 Python 코드의 유형을 확인하고 추론합니다. 파이타입은 다음을 수행할 수 있습니다:
Pytype은 정적 분석기입니다. 실행되는 코드를 실행하지 않습니다.
Google의 수천 개의 프로젝트는 Python 코드를 올바른 형식으로 유지하고 오류 없이 유지하기 위해 pytype을 사용합니다.
자세한 내용은 사용 설명서, FAQ 또는 지원되는 기능을 확인하세요.
Pytype은 점진적인 타이핑 대신 추론을 사용합니다. 이는 코드에 유형 힌트가 없는 경우에도 코드의 유형을 유추한다는 의미입니다. 따라서 다른 유형 검사기에서는 놓칠 수 있는 다음과 같은 코드 관련 문제를 감지할 수 있습니다.
def f ():
return "PyCon"
def g ():
return f () + 2019
# pytype: line 4, in g: unsupported operand type(s) for +: 'str'
# and 'int' [unsupported-operands]
Pytype은 엄격하지 않고 관대 합니다. 이는 런타임에 성공하고 주석과 모순되지 않는 모든 작업을 허용한다는 의미입니다. 예를 들어, 이 코드는 pytype에서는 안전한 것으로 전달되지만 초기화되자마자 변수에 유형을 할당하는 다른 유형 검사기에서는 실패합니다.
from typing import List
def get_list () -> List [ str ]:
lst = [ "PyCon" ]
lst . append ( 2019 )
return [ str ( x ) for x in lst ]
# mypy: line 4: error: Argument 1 to "append" of "list" has
# incompatible type "int"; expected "str"
해당 FAQ 항목도 참조하세요.
파일 또는 디렉터리 유형 검사를 빠르게 시작하려면 다음을 실행하고 file_or_directory
입력으로 바꿉니다.
pip install pytype
pytype file_or_directory
전체 패키지에 pytype을 설정하려면 패키지 바로 위 디렉터리의 pyproject.toml
파일에 다음을 추가하고 package_name
패키지 이름으로 바꿉니다.
[ tool . pytype ]
inputs = [ ' package_name ' ]
이제 인수 없는 명령 pytype
실행하여 패키지 유형을 확인할 수 있습니다. 자동화된 테스트에 pytype을 추가하는 것도 쉽습니다. GitHub Actions에서 pytype을 실행하는 GitHub 프로젝트의 예를 참조하세요.
마지막으로 pytype은 기본적으로 .pytype/pyi
에 있는 추론된 유형 정보의 파일을 생성합니다. 이 정보를 사용하여 해당 소스 파일에 유형 주석을 달 수 있습니다.
merge-pyi -i < filepath > .py .pytype/pyi/ < filename > .pyi
pytype을 실행하려면 Python 3.8-3.12 인터프리터가 필요하고, 분석 중인 코드의 Python 버전(지원: 3.8-3.12)에 대한 $PATH
의 인터프리터도 필요합니다.
플랫폼 지원:
* Alpine Linux에서는 업스트림 종속성 문제로 인해 설치가 실패할 수 있습니다. 가능한 해결 방법은 이 문제의 세부정보를 참조하세요.
** ninja 종속성 설치에 실패하면 cmake가 설치되어 있는지 확인하세요. 자세한 내용은 이 문제를 참조하세요.
Pytype은 pip를 통해 설치할 수 있습니다. 설치에는 wheel
및 setuptools
필요합니다. (virtualenv에서 작업하는 경우 이 두 패키지가 이미 있어야 합니다.)
pip install pytype
또는 GitHub의 소스 코드에서.
git clone --recurse-submodules https://github.com/google/pytype.git
cd pytype
pip install .
--recurse-submodules
사용하는 대신 다음을 실행할 수도 있습니다.
git submodule init
git submodule update
pytype
디렉토리에 있습니다. 코드를 편집하고 편집 내용을 실시간으로 추적하려면 pip install 명령을 다음으로 바꾸십시오.
pip install -e .
위의 단계를 따르되 먼저 올바른 라이브러리가 있는지 확인하세요.
sudo apt install build-essential python3-dev libpython3-dev
usage: pytype [options] input [input ...]
positional arguments:
input file or directory to process
일반적인 옵션:
-V, --python-version
: 대상 코드의 Python 버전(major.minor)입니다. pytype이 실행되는 버전이 기본값입니다.-o, --output
: 생성된 .pyi 파일을 포함하여 모든 pytype 출력이 들어가는 디렉터리입니다. 기본값은 .pytype
입니다.-d, --disable
. 무시할 오류 이름의 쉼표 또는 공백으로 구분된 목록입니다. pytype의 오류 이름에 대한 자세한 설명은 이 문서에 있습니다. 기본값은 비어 있습니다. 전체 옵션 목록을 보려면 pytype --help
실행하세요.
위의 내용 외에도 $TYPESHED_HOME
설정하여 pytype이 자체 번들 복사본 대신 사용자 정의 typeshed 설치를 사용하도록 지시할 수 있습니다.
편의를 위해 pytype 구성을 파일에 저장할 수 있습니다. 구성 파일은 [tool.pytype]
섹션(선호)이 있는 TOML 스타일 파일이거나 [pytype]
섹션이 있는 INI 스타일 파일일 수 있습니다. 명시적인 구성 파일이 제공되지 않으면 pytype은 현재 작업 디렉터리에서 위쪽으로 이동하여 찾은 첫 번째 pyproject.toml
또는 setup.cfg
파일에서 pytype 섹션을 찾습니다.
샘플 구성 파일을 생성하여 시작하세요.
$ pytype --generate-config pytype.toml
이제 필요한 섹션만 유지하면서 로컬 설정을 기반으로 파일을 사용자 정의하세요. 디렉터리는 구성 파일의 위치를 기준으로 할 수 있으며, 이는 프로젝트의 일부로 구성 파일을 체크인하려는 경우에 유용합니다.
예를 들어, 다음과 같은 디렉터리 구조가 있고 ~/repo2/bar
패키지에 종속된 ~/repo1/foo
패키지를 분석하려고 한다고 가정합니다.
~/
├── repo1
│ └── foo
│ ├── __init__.py
│ └── file_to_check.py
└── repo2
└── bar
├── __init__.py
└── dependency.py
다음은 pytype에게 ~/repo1/foo
Python 3.9 코드로 형식 확인하고, ~/repo1
및 ~/repo2
에서 패키지를 찾고, 속성 오류를 무시하도록 지시하는 채워진 구성 파일입니다. 패키지 경로에는 패키지 자체가 포함되지 않습니다.
$ cat ~/repo1/pytype.toml
# NOTE: All relative paths are relative to the location of this file.
[ tool . pytype ]
# Space-separated list of files or directories to process.
inputs = [
' foo ' ,
]
# Python version (major.minor) of the target code.
python_version = ' 3.9 '
# Paths to source code directories, separated by ':'.
pythonpath = . :~/repo2
# Space-separated list of error names to ignore.
disable = [
' attribute-error ' ,
]
pytype의 손상된 종속성 검사기를 실행하여 ~/repo2
pythonpath에 추가해야 함을 발견할 수 있었습니다.
$ pytype --config=~/repo1/pytype.toml ~/repo1/foo/*.py --unresolved
Unresolved dependencies:
bar.dependency
Pytype은 pytype
자체 외에도 몇 가지 스크립트와 함께 제공됩니다.
annotate-ast
, AST에 대해 진행 중인 유형 주석자입니다.merge-pyi
- .pyi 파일의 유형 정보를 Python 파일로 병합하기 위한 것입니다.pytd-tool
, .pyi 파일용 파서.pytype-single
pytype 개발자를 위한 디버깅 도구로, 모든 종속 항목에 대해 .pyi 파일이 이미 생성되었다고 가정하여 단일 Python 파일을 분석합니다.pyxref
, 상호 참조 생성기. 아파치 2.0
이것은 공식 Google 제품이 아닙니다.