Programování

4 kontroly typu Pythonu, aby byl váš kód čistý

Na začátku neměl Python žádné dekorace typu. To zapadá do celkového cíle, díky němuž je jazyk rychlý a snadno se s ním pracuje, s flexibilními typy objektů, které se přizpůsobí obratům psaní kódu a pomohou vývojářům udržet jejich kód stručný.

V posledních několika letech však Python přidal podporu pro anotace typů, což inspirovalo celou kulturu softwaru věnovaného kontrole typu Pythonu během vývoje. Python nekontroluje typy za běhu - alespoň zatím. Ale tím, že využijete dobrou kontrolu typu a budete s sebou na brokovnici v IDE, které si vyberete, můžete použít anotace typu Pythonu k vyčištění mnoha běžných chyb, než zasáhnou produkci.

V tomto článku se budeme věnovat čtyřem hlavním doplňkům kontroly typu pro Python. Všechny sledují zhruba stejný vzor, ​​skenují kód Pythonu s anotacemi typů a poskytují zpětnou vazbu. Každý ale nabízí vlastní užitečné doplňky k základnímu konceptu.

Mypy

Mypy byl pravděpodobně první statický systém kontroly typu pro Python, protože práce na něm začaly v roce 2012 a je stále v aktivním vývoji. Je to v podstatě prototyp toho, jak knihovny pro kontrolu typu třetích stran fungují v Pythonu, i když se od té doby objevilo mnoho dalších a rozšířilo své funkce.

Mypy může běžet samostatně nebo z příkazového řádku, nebo může fungovat jako součást integrace editoru nebo linteru IDE. Mnoho editorů a IDE integruje Mypy; Rozšíření Visual Studio Code pro Python s ním může pracovat přímo. Po spuštění Mypy generuje zprávy o konzistenci vašeho kódu na základě informací o typu, které poskytuje.

Pokud váš kód neobsahuje anotace typu, Mypy většinu kontrol kódu neprovede. Mypy však můžete použít k označení bezanotovaného kódu. Toho lze dosáhnout s různou mírou přísnosti v závislosti na potřebách člověka.

Pokud začínáte úplně od základu s kódovou základnou a chcete preventivně agresivní strategii lintingu, můžete použít --přísný možnost zabránit jakémukoli netypovému kódu. Na druhou stranu, pokud pracujete se starou základnou kódů, která nemá mnoho definic typů, můžete použít uvolněnější možnosti, například zabránit pouze netypovaným definicím funkcí s--dallow-untyped-defs a zároveň umožňuje další netypový kód. A vždy můžete použít vložené komentáře jako # typ: ignorovat aby jednotlivé řádky nebyly označeny.

Mypy může využívat soubory se zakázaným inzerováním PEP 484, pokud chcete použít rady typu pro veřejná rozhraní modulu. Kromě toho Mypy nabízí tvrdohlavost, nástroj, který automaticky generuje stub soubory z existujícího kódu. U netypového kódu používají soubory se zakázaným inzerováním obecné typy, které můžete podle potřeby označit.

Pytype

Pytype, vytvořený Googlem, se liší od Mypy používáním inference namísto pouhého popisu deskriptorů. Jinými slovy, Pytype se pokouší určit typy analýzou toku kódu, místo aby se striktně spoléhal na anotace typů.

Pytype se mýlí na straně shovívavosti, kdykoli to má smysl. Pokud máte operaci, která funguje za běhu a není v rozporu s žádnými anotacemi, Pytype na ni nebude nadávat. To však znamená, že některé problémy, které by měly být označeny (např. Deklarace proměnné s typem v jednom bodě a její předefinování ve stejném kontextu), projdou neohlášeným. Dokumentace uvádí, že takové věci budou někdy v budoucnu zakázány.

Pokud se rozhodnete do svého kódu přidat anotace typu, pak Pytype'styp_odhalení funkce přijde obzvláště užitečná. Pokud do kódu vložíte prohlášení, které čte odhalit_typ (expr), Hodnotí Pytype expr a vydá výstrahu, která popisuje jeho typ.

Všimněte si, že určitá chování Pytype jsou řízena přidáním atributů do samotného kódu. Například pokud chcete zabránit Pytype ve stížnosti na chybějící atributy nebo členy modulu, které jsou nastaveny dynamicky, musíte přidat atribut _HAS_DYNAMIC_ATTRIBUTES = Pravda na dotyčnou třídu nebo modul, na rozdíl od nastavení nějakého druhu metadat konfigurace Pytype.

Pyright / Pylance

Pyright je kontrola typu Pythonu od společnosti Microsoft, která je součástí rozšíření Pylance pro Visual Studio Code. Pokud již jste uživatelem VS Code, je nejpříhodnějším způsobem práce s Pyrightem rozšíření Pylance; stačí jej nainstalovat a jít. Pyright poskytuje dobrý zážitek z kontroly typu a vložení kódu typu vše v jednom s mnoha stejnými vymoženostmi a pokroky jako předchozí nástroje pro analýzu Pythonu.

Stejně jako Pytype, i Pyright může pracovat s databázemi kódů, které nemají žádné informace o typu. V těchto případech se Pyright bude snažit odvodit, jaké typy jsou ve hře. Stále tedy můžete dosáhnout dobrých výsledků s Pytype na starších databázích bez deklarací typu. Postupným přidáváním textových poznámek do kódu však získáte lepší výsledky.

Pyright je vysoce flexibilní způsoby, které doplňují návrhy projektů Pythonu v reálném světě. Stejně jako u jiných typů kontroly, Pyright lze konfigurovat na základě jednotlivých projektů pomocí konfiguračního souboru ve formátu JSON v adresáři projektu. Jednotlivé cesty lze v konfiguračním souboru vyloučit (nikdy nekontrolovat) nebo ignorovat (potlačit chyby a varování) a možnosti jsou velmi podrobné.

Ve VS Code mohou mít pracovní prostory s více kořeny každý svou vlastní konfiguraci Pyright, pro případ, že by různé části projektu potřebovaly různé konfigurace lintingu. Ve stejném duchu můžete v rámci projektu definovat několik „prováděcích prostředí“, každé s vlastní cestou venv nebo importem.

Hranice

Vytvořili vývojáři na Facebooku a Instagramu, Pyre jsou vlastně dva nástroje v jednom: kontrola typu (Pyre) a nástroj pro analýzu statického kódu (Pysa). Tyto dva nástroje jsou navrženy tak, aby fungovaly ruku v ruce a poskytovaly vyšší úroveň kontroly a analýzy než jiné nástroje, i když uživatel musí udělat trochu těžkého zvedání, aby je plně využil.

Pyre zaujímá přístup podobný Pytype a Mypy. S netypovým kódem se zachází mírněji než s typovým kódem, takže můžete začít s netypovou Python codebase a přidávat anotační funkce podle funkcí a modul po modulu. Přepněte v modulu na „přísný režim“ a Pyre označí všechny chybějící poznámky. Nebo můžete nastavit přísný režim jako výchozí a odhlásit se na úrovni modulu. Pyre bude také pracovat se stub soubory ve formátu .pyi.

Pyre má výkonnou funkci pro migraci kódových bází do zadaného formátu. The usoudit možnost příkazového řádku zapracuje soubor nebo adresář, provede poučné odhady o použitých typech a použije anotace na soubory. Nejprve si ale budete chtít udělat zálohu svého kódu! (Pokud chcete získat informace o typu od a běh Program Python, můžete to udělat s jiným projektem Facebook / Instagram, MonkeyType.)

Zatímco funkce Pyre odrážejí vlastnosti ostatních zde popsaných balíčků, Pysa je jedinečná. Pysa provádí „kritickou analýzu“ kódu, aby identifikovala potenciální bezpečnostní problémy, spoléhá se na knihovnu analýz toku pro určité softwarové komponenty a označuje kód, který se jeví jako zranitelný. Cokoli, čeho se tento kód dotkne, bude také označeno jako poskvrněné, můžete však určit komponenty, které dezinfikují data, a odstranit tato data ze slabého grafu.

Jednou z nevýhod je, že knihovna analýz poškození komponentů od Pysy je stále malá, takže možná budete muset navrhnout svůj vlastní model. Ale mnoho z nepříznivých analýz je pro software, který je široce používán, jako je webový rámec Django, SQL Alchemy ORM a knihovna datových věd Pandas, nemluvě o analýzách běžných problémů se souborovým systémem.

Jak udělat víc s Pythonem

  • Jak pracovat s datovým typem seznamu Python
  • Jak zabalit aplikace v Pythonu s Aktovkou BeeWare
  • Jak spustit Anacondu bok po boku s ostatními Pythony
  • Jak používat datové třídy Pythonu
  • Začněte s asynchronizací v Pythonu
  • Jak používat asyncio v Pythonu
  • 3 kroky k generální opravě asynchronního prostředí Pythonu
  • Jak používat PyInstaller k vytvoření spustitelných souborů Pythonu
  • Výukový program pro Cython: Jak zrychlit Python
  • Jak chytře nainstalovat Python
  • Jak spravovat projekty v Pythonu pomocí Poetry
  • Jak spravovat projekty Pythonu pomocí Pipenv
  • Virtualenv a venv: Vysvětlení virtuálních prostředí Pythonu
  • Python virtualenv a venv dělá a nedělá
  • Vysvětlení vláken a podprocesů v Pythonu
  • Jak používat debugger Pythonu
  • Jak používat timeit k profilování kódu Pythonu
  • Jak používat cProfile k profilování kódu Pythonu
  • Jak převést Python na JavaScript (a zpět)
$config[zx-auto] not found$config[zx-overlay] not found