4 programa za provjeru Python za održavanje čistoće vašeg koda

U početku Python nije imao tipske ukrase. To se uklapa u opći cilj da jezik bude brz i lak za rad, s fleksibilnim vrstama objekata koji uklapaju preokrete u pisanju koda i pomažu programerima da njihov kôd bude sažet.

Tijekom posljednjih nekoliko godina, međutim, Python je dodao podršku za napomene o tipovima nadahnjujući čitavu kulturu softvera posvećenog provjeri tipova Pythona tijekom razvoja. Python ne provjerava vrste tijekom izvođenja - barem još ne. No, koristeći prednost dobre provjere tipa, vozeći pušku sa sobom u odabranom IDE-u, možete upotrijebiti Pythonove bilješke tipa da biste otkrili mnoge uobičajene pogreške prije nego što pođu u proizvodnju.

U ovom ćemo članku istražiti četiri glavna dodatka za provjeru tipa za Python. Svi slijede otprilike isti obrazac, skenirajući Python kôd s oznakama tipa i pružajući povratne informacije. No, svaki nudi svoje korisne dodatke osnovnom konceptu.

Mypy

Mypy je mogao biti prvi sustav provjere statičkog tipa za Python, budući da je rad na njemu započeo 2012. godine, i još uvijek je u aktivnom razvoju. U osnovi je prototip kako knjižnice za provjeru nezavisnih tipova rade u Pythonu, čak i ako su se mnoge druge otada pojavile i proširile njegove značajke.

Mypy može raditi samostalno ili iz naredbenog retka ili može raditi kao dio integracije lintera u uređivaču ili IDE-u. Mnogi urednici i IDE integriraju Mypy; Proširenje Python Visual Studio Code-a može s njim izravno raditi. Kada se pokrene, Mypy generira izvješća o dosljednosti vašeg koda na temelju informacija o tipu koje pruža.

Ako vaš kôd ne sadrži napomene o tipovima, Mypy neće izvršiti veliku većinu provjera koda. Međutim, Mypy možete koristiti za označavanje nenaznačenog koda. To se može učiniti s različitim stupnjevima strogosti, ovisno o nečijim potrebama.

Ako s početnom bazom koda započinjete ispočetka i želite preventivno agresivnu strategiju povezivanja, možete upotrijebiti --strictopciju za sprečavanje netipiziranog koda. S druge strane, ako radite s naslijeđenom bazom koda koja nema puno definicija tipova, možete upotrijebiti opuštenije opcije, poput sprječavanja samo netipiziranih definicija funkcije,  --disallow-untyped-defs dok istovremeno dopuštate drugi netipizirani kôd. A uvijek možete upotrijebiti umetnute komentare kako # type: ignorebiste spriječili označavanje pojedinih redaka.

Mypy može koristiti PEP 484 datoteke klina kada želite koristiti savjete o tipu za javno sučelje modula. Povrh svega, Mypy nudi stubgen, alat koji automatski generira kvarne datoteke iz postojećeg koda. Za netipizirani kôd datoteke ometača koriste generičke tipove, koje zatim možete označiti prema potrebi.

Pitip

Pytype, koji je stvorio Google, razlikuje se od Mypyja po tome što koristi zaključivanje umjesto samo deskriptora tipa. Drugim riječima, Pytype pokušava odrediti vrste analizirajući tijek koda, umjesto da se strogo oslanja na bilješke tipova.

Pytype griješi na strani popustljivosti kad god to ima smisla. Ako imate operaciju koja radi u vrijeme izvođenja i ne proturječi nijednoj bilješci, Pytype neće škripati zbog toga. Međutim, to znači da neki problemi koje treba označiti (npr. Deklariranje varijable s tipom u jednom trenutku, a zatim redefiniranje u istom kontekstu) prolaze nenajavljeno. U dokumentaciji se navodi da će takve stvari u jednom trenutku biti zabranjene.

Ako odlučite dodati bilješke o tipovima u svoj kôd, tada Pytytova  reveal_typefunkcija dolazi posebno korisna. Ako u svoj kôd umetnete izjavu koja čita reveal_type(expr), Pytype procjenjuje expri emitira upozorenje koje opisuje njegovu vrstu. 

Imajte na umu da se određenim Pytype ponašanjem kontrolira dodavanjem atributa samom kodu. Na primjer, ako želite spriječiti Pytype da se žali na nedostajuće atribute ili članove modula koji su dinamički postavljeni, atribut morate dodati _HAS_DYNAMIC_ATTRIBUTES = Truepredmetnoj klasi ili modulu, za razliku od postavljanja neke vrste metapodataka konfiguracije Pytype.

Pyright / Pylance

Pyright je Microsoftova alatka za provjeru tipa Python, uključena kao dio proširenja Pylance za Visual Studio Code. Ako ste već korisnik VS koda, proširenje Pylance je najprikladniji način za rad s Pyrightom; samo ga instalirajte i krenite. Pyright pruža dobro cjelovito iskustvo provjere i povezivanja koda s mnogim istim pogodnostima i napretkom kao i prethodni Python alati za analizu.

Kao i Pytype, Pyright može raditi s bazama kodova koje nemaju nikakve informacije o tipu. U tim će se slučajevima Pyright potruditi da zaključi koje su vrste u igri. Tako i dalje možete postići dobre rezultate s Pytypeom na starijim kodnim bazama bez deklaracija tipa. No s vremenom ćete dobivati ​​sve bolje rezultate postupnim dodavanjem napomena o tipovima u kôd.

Pyright je vrlo fleksibilan na načine koji nadopunjuju nacrte stvarnih Python projekata. Kao i kod ostalih vrsta provjera, i Pyright se može konfigurirati po projektu s konfiguracijskom datotekom u formatu JSON u direktoriju projekta. Pojedinačne staze mogu se izuzeti (nikada ne provjeriti) ili zanemariti (suzbijanje pogrešaka i upozorenja) u datoteci za konfiguriranje, a opcije su vrlo detaljne.

U VS Code, radni prostori s više korijena mogu imati vlastitu Pyright konfiguraciju, u slučaju da različiti dijelovi projekta trebaju različite konfiguracije povezivanja. U istom smislu, možete definirati više "izvršnih okruženja" unutar projekta, svako sa svojim venv ili putovima uvoza.

Lomača 

Stvoreni od programera na Facebooku i Instagramu, Pyre je zapravo dva alata u jednom: alat za provjeru tipa (Pyre) i alat za statičku analizu koda (Pysa). Njih dvoje su dizajnirani da rade ruku pod ruku kako bi pružili višu razinu provjere i analize od ostalih alata, iako korisnik treba malo dići teško da bi ih u potpunosti iskoristio.

Pyre ima pristup sličan Pytypeu i Mypyu. S netipiziranim kodom postupa se blaže nego s upisanim kodom, tako da možete započeti s netipiziranom Python bazom koda i dodavati funkcije bilješki po funkcijama i modulima po modulima. Uključite "strogi način" u modulu, a Pyre će označiti sve nedostajuće napomene. Ili možete zadati strogi način rada i isključiti se na razini modula. Pyre će također raditi sa stub datotekama u .pyi formatu.

Pyre ima moćnu značajku za migraciju baza koda u otkucani format. Opcija infernaredbenog retka unosi datoteku ili direktorij, nagađa o vrstama koje se koriste i primjenjuje napomene na datoteke. Ipak ćete prvo htjeti napraviti sigurnosne kopije koda! (Ako želite dobiti informacije o tipu iz pokrenutog programa Python, to možete učiniti s drugim Facebook / Instagram projektom, MonkeyType.)

Iako Pyreove značajke odražavaju karakteristike ostalih ovdje opisanih paketa, Pysa je jedinstvena. Pysa izvodi "analizu mrlja" na kodu kako bi identificirala potencijalne sigurnosne probleme, oslanjajući se na biblioteku analiza protoka za određene softverske komponente i označavanje koda koji se čini ranjivim. Sve što dodirne taj kôd također će biti označeno kao zaprljano, iako možete odrediti komponente koje dezinficiraju podatke i ukloniti te podatke s grafikona nečistoća.

Jedan je nedostatak što je Pysina biblioteka analiza nečistoća komponenata nezavisnih proizvođača još uvijek mala, pa ćete možda trebati osmisliti vlastiti model. Ali mnoge analize nečistoća odnose se na softver koji se široko koristi, poput Django web okvira, SQL Alchemy ORM i Pandasove biblioteke podataka, a da se ne spominju analize uobičajenih problema s datotečnim sustavom.

Kako učiniti više s Pythonom

  • Kako raditi s tipom podataka popisa Python
  • Kako spakirati Python aplikacije s BeeWare aktovkom
  • Kako pokrenuti Anacondu rame uz rame s drugim Pythonima
  • Kako koristiti Python klase podataka
  • Započnite s async u Pythonu
  • Kako koristiti asyncio u Pythonu
  • 3 koraka do Python async remonta
  • Kako koristiti PyInstaller za stvaranje Python izvršnih datoteka
  • Vodič za Cython: Kako ubrzati Python
  • Kako instalirati Python na pametan način
  • Kako upravljati Python projektima pomoću Poezije
  • Kako upravljati Python projektima s Pipenv-om
  • Virtualenv i venv: Objašnjena Python virtualna okruženja
  • Python virtualenv i venv čine i ne čine
  • Objašnjeni Python navoji i potprocesi
  • Kako se koristi Python program za ispravljanje pogrešaka
  • Kako koristiti timeit za profiliranje Python koda
  • Kako koristiti cProfile za profiliranje Python koda
  • Kako pretvoriti Python u JavaScript (i natrag)