Programiranje

4 preverjevalniki vrste Python, da bo koda čista

Na začetku Python ni imel nobenih okraskov. To ustreza splošnemu cilju, s katerim je jezik hiter in enostaven za delo, s prilagodljivimi vrstami predmetov, ki prilagodijo zasuke pisanja kode in pomagajo razvijalcem, da ohranijo svojo jedrnato kodo.

V zadnjih nekaj letih pa je Python dodal podporo za pripise tipov in navdihnil celo kulturo programske opreme, namenjene preverjanju vrste Python med razvojem. Python med izvajanjem ne preverja vrst - vsaj še ne. Toda z izkoriščanjem dobrega preverjalnika tipov, ki s seboj vozi puško v izbranem IDE, lahko s pomočjo Pythonovih pripisov tipa odkrijete številne pogoste napake, preden pridejo v produkcijo.

V tem članku se bomo poglobili v štiri glavne dodatke za preverjanje tipa za Python. Vsi sledijo približno enakemu vzorcu, skenirajo kodo Python s pripisi tipa in posredujejo povratne informacije. Toda vsak ponuja svoje koristne dodatke k osnovnemu konceptu.

Mypy

Mypy je bil verjetno prvi sistem za preverjanje statičnega tipa za Python, saj se je delo na njem začelo leta 2012 in je še vedno v aktivnem razvoju. V bistvu je prototip za delovanje knjižnic za preverjanje neodvisnih vrst v Pythonu, četudi so se od takrat pojavile številne druge in razširile njegove funkcije.

Mypy lahko deluje samostojno ali iz ukazne vrstice ali deluje kot del integracije urejevalnika ali IDE-jeve povezave. Številni urejevalniki in IDE vključujejo Mypy; Razširitev Python Visual Studio Code lahko z njo deluje neposredno. Ob zagonu Mypy ustvari poročila o skladnosti vaše kode na podlagi informacij o tipu, ki jih zagotavlja.

Če vaša koda ne vsebuje pripisov vrst, Mypy ne bo izvedel velike večine svojih preverjanj kode. Lahko pa Mypy uporabite za označevanje nenavedene kode. To je mogoče storiti z različno natančnostjo, odvisno od posameznikovih potreb.

Če začnete s kodno bazo in želite preventivno agresivno strategijo povezovanja, lahko uporabite --strogo možnost za preprečitev kakršne koli netipkane kode. Po drugi strani pa, če delate s podedovano kodno bazo, ki nima veliko definicij tipov, lahko uporabite bolj sproščene možnosti, na primer preprečevanje samo netipkanih definicij funkcij z--disallow-untyped-defs hkrati pa dovoljuje tudi druge netipkane kode. In vedno lahko uporabite vstavljene komentarje, kot so # type: prezri da posamezne vrstice ne bodo označene.

Mypy lahko uporabi datoteke za zatiranje PEP 484, kadar želite uporabiti namige tipa za javne vmesnike modula. Poleg tega ponuja Mypy stubgen, orodje, ki samodejno generira datoteke škrbine iz obstoječe kode. Za netipizirano kodo datoteke omake uporabljajo splošne vrste, ki jih lahko nato po potrebi označite.

Pytype

Pytype, ki ga je ustvaril Google, se od podobnih Mypy razlikuje po uporabi sklepanja namesto samo deskriptorjev tipov. Z drugimi besedami, Pytype poskuša določiti tipe z analizo pretoka kode, namesto da se zanaša zgolj na pripise tipov.

Pytype se zmoti na strani prizanesljivosti, kadar koli je to smiselno. Če imate operacijo, ki deluje med izvajanjem in ni v nasprotju z nobenim pripisom, Pytype zaradi tega ne bo škripal. Vendar to pomeni, da nekatere težave, ki bi jih bilo treba označiti (npr. Deklariranje spremenljivke s tipom na eni točki in nato ponovno definiranje v istem kontekstu), nenapovedane minejo. Dokumentacija navaja, da bodo takšne stvari v prihodnosti nekoč prepovedane.

Če v kodo dodate opombe tipa, potem Pytyperazkrij_tip funkcija je še posebej priročna. Če v kodo vstavite stavek, ki se glasi razkrij_tip (izraz), Pytype oceni ekspr in odda opozorilo, ki opisuje njegovo vrsto.

Upoštevajte, da nekatera vedenja Pytype nadziramo tako, da kodi dodamo atribute. Če želite na primer preprečiti, da bi se Pytype pritoževal nad manjkajočimi atributi ali člani modula, ki so nastavljeni dinamično, morate dodati atribut _HAS_DYNAMIC_ATTRIBUTES = Res za zadevni razred ali modul, v nasprotju z nastavitvijo neke vrste metapodatkov o konfiguraciji Pytype.

Pyright / Pylance

Pyright je Microsoftov program za preverjanje vrste Python, ki je vključen kot del razširitve Pylance za kodo Visual Studio. Če že uporabljate kodo VS, je razširitev Pylance najprimernejši način za delo s Pyrightom; preprosto ga namestite in pojdite. Pyright nudi dobro vsestransko izkušnjo preverjanja in povezovanja kode z veliko enakimi ugodnostmi in napredki kot prejšnja orodja za analizo Pythona.

Tako kot Pytype lahko tudi Pyright deluje z bazami kod, ki nimajo nobenih informacij o tipih. V teh primerih se bo Pyright potrudil, da bo ugotovil, katere vrste so v igri. Tako lahko še vedno dosežete dobre rezultate s Pytype na starejših kodnih bazah brez izjave tipa. Toda sčasoma boste dobili boljše rezultate, ko postopoma dodajate pripise vrst v kodo.

Pyright je zelo prilagodljiv na načine, ki dopolnjujejo zasnove resničnih Pythonovih projektov. Kot pri drugih preverjalnikih vrst je tudi Pyright mogoče konfigurirati za vsak projekt s konfiguracijsko datoteko v obliki JSON v imeniku projekta. Posamezne poti lahko v konfiguracijski datoteki izključite (nikoli ne preverite) ali prezrete (napake in opozorila zatirajo), možnosti pa so zelo natančne.

V VS Code imajo lahko delovni prostori z več koreninami svojo lastno konfiguracijo Pyright, če različni deli projekta potrebujejo različne konfiguracije povezovanja. V isti smeri lahko v projektu definirate več »izvedbenih okolij«, od katerih ima vsaka svojo venv ali uvozno pot.

Pyre

Pyre je ustvaril razvijalce na Facebooku in Instagramu in je dejansko dve orodji v enem: preverjevalnik vrste (Pyre) in orodje za statično analizo kode (Pysa). Oba sta zasnovana tako, da delujeta z roko v roki in zagotavljata višjo raven preverjanja in analize kot druga orodja, čeprav mora uporabnik nekoliko dvigniti težka dela, da jih lahko v celoti izkoristi.

Pyre ima pristop, podoben Pytype in Mypy. Z netipizirano kodo se ravna blažje kot s tipkano kodo, zato lahko začnete z netipizirano kodno bazo Python in dodajate funkcije pripisov po funkcijah in modulih po modulih. V modulu preklopite na »strog način« in Pyre bo označil vse manjkajoče pripise. Lahko pa privzeti strogi način in onemogočite na ravni modula. Pyre bo delal tudi s šibkimi datotekami v obliki .pyi.

Pyre ima zmogljivo funkcijo za selitev kodnih baz v vtipkano obliko. The sklepati Možnost ukazne vrstice vnese datoteko ali imenik, ugiba o uporabljenih vrstah in pripise datotek uporabi. Najprej boste želeli narediti varnostno kopijo svoje kode! (Če želite informacije o tipu dobiti od teče Python, to lahko storite z drugim Facebook / Instagram projektom, MonkeyType.)

Medtem ko Pyre-jeve značilnosti odsevajo lastnosti ostalih tukaj opisanih paketov, je Pysa edinstven. Pysa izvaja "analizo umazanije" na kodi za prepoznavanje morebitnih varnostnih težav, pri čemer se zanaša na knjižnico analiz tokov za nekatere programske komponente in kodo za označevanje, ki se zdi ranljiva. Vse, česar se ta koda dotakne, bo prav tako označeno kot umazano, čeprav lahko določite komponente, ki sanirajo podatke, in te podatke odstranite iz grafa umazanije.

Ena pomanjkljivost je, da je Pysina knjižnica analiz neželenih komponent še vedno majhna, zato boste morda morali oblikovati svoj model. Toda številne analize umazanije so namenjene programski opremi, ki se pogosto uporablja, kot so spletni okvir Django, SQL Alchemy ORM in podatkovna knjižnica Pandas, da ne omenjamo analiz za pogosta vprašanja datotečnega sistema.

Kako narediti več s Pythonom

  • Kako delati s podatkovnim tipom seznama Python
  • Kako zapakirati aplikacije Python v aktovko BeeWare
  • Kako zagnati Anacondo vzporedno z drugimi Pythoni
  • Kako uporabljati podatkovne razrede Python
  • Začnite z async v Pythonu
  • Kako uporabljati asyncio v Pythonu
  • 3 koraki do prenove async Pythona
  • Kako uporabiti PyInstaller za ustvarjanje izvršljivih datotek Python
  • Vadnica za Cython: Kako pospešiti Python
  • Kako namestiti Python na pameten način
  • Kako upravljati projekte Python s poezijo
  • Kako upravljati projekte Python s Pipenv
  • Virtualenv in venv: Razložena navidezna okolja Python
  • Python virtualenv in venv dela in ne sme
  • Razloženi navoji Python in podprocesi
  • Kako uporabljati razhroščevalnik Python
  • Kako uporabiti timeit za profiliranje kode Python
  • Kako uporabiti cProfile za profiliranje kode Python
  • Kako pretvoriti Python v JavaScript (in nazaj)