Pytype memeriksa dan menyimpulkan tipe untuk kode Python Anda - tanpa memerlukan anotasi tipe. Tipe py dapat:
Pytype adalah penganalisis statis; itu tidak mengeksekusi kode yang dijalankannya.
Ribuan proyek di Google mengandalkan pytype untuk menjaga kode Python mereka tetap terketik dengan baik dan bebas kesalahan.
Untuk informasi lebih lanjut, lihat panduan pengguna, FAQ, atau fitur yang didukung.
Pytype menggunakan inferensi alih-alih pengetikan bertahap. Artinya, ia akan menyimpulkan tipe pada kode meskipun kode tersebut tidak memiliki petunjuk tipe. Sehingga dapat mendeteksi masalah dengan kode seperti ini, yang mungkin terlewatkan oleh pemeriksa tipe lainnya:
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 lebih lunak daripada ketat. Artinya, ini mengizinkan semua operasi yang berhasil saat runtime dan tidak bertentangan dengan anotasi. Misalnya, kode ini akan dianggap aman di pytype, namun gagal di pemeriksa tipe lain, yang menetapkan tipe ke variabel segera setelah diinisialisasi:
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"
Lihat juga entri FAQ terkait.
Untuk segera mulai memeriksa jenis file atau direktori, jalankan perintah berikut, ganti file_or_directory
dengan masukan Anda:
pip install pytype
pytype file_or_directory
Untuk mengatur pytype pada seluruh paket, tambahkan yang berikut ini ke file pyproject.toml
di direktori tepat di atas paket, ganti package_name
dengan nama paket:
[ tool . pytype ]
inputs = [ ' package_name ' ]
Sekarang Anda dapat menjalankan perintah tanpa argumen pytype
untuk memeriksa tipe paket. Menambahkan pytype ke pengujian otomatis Anda juga mudah; lihat contoh proyek GitHub yang menjalankan pytype di GitHub Actions.
Terakhir, pytype menghasilkan file informasi tipe yang disimpulkan, yang secara default terletak di .pytype/pyi
. Anda dapat menggunakan informasi ini untuk mengetikkan anotasi pada file sumber yang sesuai:
merge-pyi -i < filepath > .py .pytype/pyi/ < filename > .pyi
Anda memerlukan juru bahasa Python 3.8-3.12 untuk menjalankan pytype, serta juru bahasa di $PATH
untuk versi Python dari kode yang Anda analisis (didukung: 3.8-3.12).
Dukungan platform:
* Di Alpine Linux, instalasi mungkin gagal karena masalah dengan dependensi upstream. Lihat detail masalah ini untuk kemungkinan perbaikan.
** Jika ketergantungan ninja gagal diinstal, pastikan cmake diinstal. Lihat masalah ini untuk detailnya.
Pytype dapat diinstal melalui pip. Perhatikan bahwa instalasi memerlukan wheel
dan setuptools
. (Jika Anda bekerja di virtualenv, kedua paket ini seharusnya sudah ada.)
pip install pytype
Atau dari kode sumber di GitHub.
git clone --recurse-submodules https://github.com/google/pytype.git
cd pytype
pip install .
Daripada menggunakan --recurse-submodules
, Anda juga bisa menjalankannya
git submodule init
git submodule update
di direktori pytype
. Untuk mengedit kode dan hasil edit Anda dilacak secara langsung, ganti perintah pip install dengan:
pip install -e .
Ikuti langkah-langkah di atas, tetapi pastikan Anda memiliki perpustakaan yang benar terlebih dahulu:
sudo apt install build-essential python3-dev libpython3-dev
usage: pytype [options] input [input ...]
positional arguments:
input file or directory to process
Opsi umum:
-V, --python-version
: Versi Python (major.minor) dari kode target. Defaultnya adalah versi yang menjalankan pytype.-o, --output
: Direktori tempat semua keluaran pytype berada, termasuk file .pyi yang dihasilkan. Defaultnya adalah .pytype
.-d, --disable
. Daftar nama kesalahan yang dipisahkan koma atau spasi untuk diabaikan. Penjelasan mendetail tentang nama kesalahan pytype ada di dokumen ini. Defaultnya adalah kosong. Untuk daftar opsi lengkap, jalankan pytype --help
.
Selain hal di atas, Anda dapat mengarahkan pytype untuk menggunakan instalasi tipe khusus alih-alih salinan paketnya sendiri dengan menyetel $TYPESHED_HOME
.
Untuk kenyamanan, Anda dapat menyimpan konfigurasi pytype Anda dalam sebuah file. File konfigurasi dapat berupa file bergaya TOML dengan bagian [tool.pytype]
(lebih disukai) atau file bergaya INI dengan bagian [pytype]
. Jika file konfigurasi eksplisit tidak disediakan, pytype akan mencari bagian pytype di file pyproject.toml
atau setup.cfg
pertama yang ditemukan dengan berjalan ke atas dari direktori kerja saat ini.
Mulailah dengan membuat contoh file konfigurasi:
$ pytype --generate-config pytype.toml
Sekarang sesuaikan file berdasarkan pengaturan lokal Anda, simpan hanya bagian yang Anda perlukan. Direktori mungkin berhubungan dengan lokasi file konfigurasi, yang berguna jika Anda ingin memeriksa file konfigurasi sebagai bagian dari proyek Anda.
Misalnya, Anda memiliki struktur direktori berikut dan ingin menganalisis paket ~/repo1/foo
, yang bergantung pada paket ~/repo2/bar
:
~/
├── repo1
│ └── foo
│ ├── __init__.py
│ └── file_to_check.py
└── repo2
└── bar
├── __init__.py
└── dependency.py
Berikut adalah file konfigurasi yang terisi, yang memerintahkan pytype untuk mengetik-periksa ~/repo1/foo
sebagai kode Python 3.9, mencari paket di ~/repo1
dan ~/repo2
, dan mengabaikan kesalahan atribut. Perhatikan bahwa path ke suatu paket tidak menyertakan paket itu sendiri.
$ 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 ' ,
]
Kami dapat menemukan bahwa ~/repo2
perlu ditambahkan ke pythonpath dengan menjalankan pemeriksa ketergantungan pytype yang rusak:
$ pytype --config=~/repo1/pytype.toml ~/repo1/foo/*.py --unresolved
Unresolved dependencies:
bar.dependency
Pytype dikirimkan dengan beberapa skrip selain pytype
itu sendiri:
annotate-ast
, anotator tipe yang sedang dalam proses untuk AST.merge-pyi
, untuk menggabungkan informasi tipe dari file .pyi ke dalam file Python.pytd-tool
, parser untuk file .pyi.pytype-single
, alat debugging untuk pengembang pytype, yang menganalisis satu file Python dengan asumsi bahwa file .pyi telah dibuat untuk semua dependensinya.pyxref
, generator referensi silang. Apache 2.0
Ini bukan produk resmi Google.