Indlela yokuhlola imigqa eyizigidi ezi-4 yekhodi yePython. Ingxenye 3

Sethula kuwe ingxenye yesithathu yokuhunyushwa kokuqukethwe mayelana nendlela eyathathwa iDropbox ngenkathi isebenzisa uhlelo lokuhlola uhlobo lwekhodi yePython.

Indlela yokuhlola imigqa eyizigidi ezi-4 yekhodi yePython. Ingxenye 3

β†’ Izingxenye zangaphambilini: kuqala ΠΈ okwesibili

Ifinyelela imigqa eyizigidi ezi-4 yekhodi ethayiphiwe

Enye inselele enkulu (kanye nokukhathazeka okwesibili okuvame kakhulu phakathi kwalabo abahlolwa ngaphakathi) bekuwukukhulisa inani lekhodi elimbozwe uhlobo lokuhlola ku-Dropbox. Sizame izindlela ezimbalwa zokuxazulula le nkinga, kusukela ekukhuliseni ngokwemvelo usayizi we-codebase ethayiphiwe ukuya ekugxiliseni imizamo yeqembu le-mypy ekuqondeni kohlobo oluzenzakalelayo olumile noluguquguqukayo. Ekugcineni, kwabonakala sengathi alikho isu elilula lokuwina, kodwa sakwazi ukuzuza ukukhula okusheshayo kumthamo wekhodi echasisekile ngokuhlanganisa izindlela eziningi.

Ngenxa yalokho, inqolobane yethu enkulu kunazo zonke yePython (enekhodi ye-backend) inemigqa ecishe ibe yizigidi ezi-4 yekhodi echazwe. Umsebenzi wokuthayipha ikhodi engaguquki waqedwa cishe eminyakeni emithathu. I-Mypy manje isekela izinhlobo ezahlukene zemibiko yokufaka ikhodi eyenza kube lula ukuqapha ukuqhubeka kokuthayipha. Ikakhulukazi, singakwazi ukukhiqiza imibiko ngekhodi enokungaqondakali kwezinhlobo, ezifana, ngokwesibonelo, ukusetshenziswa okusobala kohlobo. Any ezichasiselweni ezingakwazi ukuqinisekiswa, noma ngezinto ezifana nokungenisa amalabhulali ezinkampani zangaphandle angenazo izichasiselo zohlobo. Njengengxenye yephrojekthi yokuthuthukisa ukunemba kokuhlolwa kohlobo ku-Dropbox, sibe nesandla ekuthuthukiseni izincazelo zohlobo (okuthiwa amafayela e-stub) kwamanye amalabhulali omthombo ovulekile adumile endaweni ye-Python emaphakathi. kubhaliwe.

Senze (futhi salinganisa kuma-PEP alandelayo) izici ezintsha zohlobo lwesistimu ezivumela izinhlobo ezinembe kakhudlwana kwamanye amaphethini athile ePython. Isibonelo esiphawulekayo salokhu TypeDict, ehlinzeka ngezinhlobo zezichazamazwi ezifana ne-JSON ezinesethi engashintshi yokhiye beyunithi yezinhlamvu, ngasinye sinenani lohlobo lwaso. Sizoqhubeka nokwandisa uhlobo lwesistimu. Isinyathelo sethu esilandelayo cishe kuzoba ukuthuthukisa ukusekelwa kwamakhono ezinombolo wePython.

Indlela yokuhlola imigqa eyizigidi ezi-4 yekhodi yePython. Ingxenye 3
Inombolo yemigqa yekhodi enezichasiselo: iseva

Indlela yokuhlola imigqa eyizigidi ezi-4 yekhodi yePython. Ingxenye 3
Inombolo yemigqa yekhodi enezichasiselo: iklayenti

Indlela yokuhlola imigqa eyizigidi ezi-4 yekhodi yePython. Ingxenye 3
Isamba senani lemigqa yekhodi enezichasiselo

Nakhu ukubuka konke kwezici eziyinhloko zezinto esizenzile ukuze sikhulise inani lekhodi echasisiwe ku-Dropbox:

Ukuqina kwesichasiselo. Kancane kancane sandise izimfuneko zokuqina kokuchasisa ikhodi entsha. Siqale ngamathiphu e-linter aphakamisa ukuthi kwengezwe izichasiselo kumafayela asevele anezichasiselo ezithile. Manje sidinga izichasiselo zohlobo kumafayela amasha ePython nakumafayela amaningi akhona.

Ukuthayipha imibiko. Sithumela amaqembu imibiko masonto onke ngezinga lokuthayipha amakhodi awo futhi sinikeze iseluleko ngalokho okufanele kuchazwe kuqala.

Ukuthandwa kwe-mypy. Sikhuluma nge-mypy emicimbini futhi sikhulume namathimba ukuze siwasize aqale ngohlobo lwezichasiselo.

Amapholi. Senza izinhlolovo zabasebenzisi ngezikhathi ezithile ukuze sihlonze izinkinga ezinkulu. Sesilungele ukuya kude ekuxazululeni lezi zinkinga (ngisho nokwakha ulimi olusha ukusheshisa i-mypy!).

Ukusebenza. Sithuthukise kakhulu ukusebenza kwe-mypy ngokusebenzisa i-daemon ne-mypyc. Lokhu kwenzelwa ukulungisa iziphazamiso ezivela ngesikhathi senqubo yezichasiselo, kanye nokukwazi ukusebenza ngenani elikhulu lekhodi.

Ukuhlanganiswa nabahleli. Sakhe amathuluzi ukusekela ukusebenzisa i-mypy kubahleli abadumile ku-Dropbox. Lokhu kuhlanganisa i-PyCharm, i-Vim ne-VS Code. Lokhu kwenza yaba lula kakhulu inqubo yokuchasisa ikhodi nokuhlola ukusebenza kwayo. Lezi zinhlobo zezenzo zivamile uma kuchazwa ikhodi ekhona.

Ukuhlaziya okumile. Sidale ithuluzi lokulinganisa amasiginesha okusebenza sisebenzisa amathuluzi okuhlaziya amile. Leli thuluzi lingasebenza kuphela ezimeni ezilula, kodwa lisisize ukukhulisa uhlobo lwekhodi yethu ngaphandle komzamo omkhulu.

Usekelo lwamalabhulali ezinkampani zangaphandle. Amaphrojekthi ethu amaningi asebenzisa ikhithi yamathuluzi ye-SQLAlchemy. Kuthatha ithuba lamakhono aguqukayo ePython izinhlobo ze-PEP 484 ezingakwazi ukumodela ngokuqondile. Thina, ngokuhambisana ne-PEP 561, sidale ifayela le-stub elihambisanayo futhi sabhala i-plugin ye-mypy (umthombo ovulekile), okuthuthukisa ukwesekwa kwe-SQLAlchemy.

Ubunzima esihlangabezane nabo

Indlela eya emigqeni eyizigidi ezi-4 yekhodi ethayiphiwe ayibanga lula kithi ngaso sonke isikhathi. Kule ndlela sihlangabezane nemigodi eminingi futhi senza amaphutha amaningana. Lezi ngezinye zezinkinga esihlangabezane nazo. Sithemba ukuthi ukukhuluma ngabo kuzosiza abanye bagweme izinkinga ezifanayo.

Amafayela angekho. Saqala umsebenzi wethu ngokubheka inani elincane lamafayela. Noma yini engafakiwe kulawa mafayela ayizange ithikhiwe. Amafayela engezwe kuhlu lokuskena lapho izichasiselo zokuqala zivela kuwo. Uma okuthile kungeniswe kusuka kumojula etholakala ngaphandle kobubanzi bokuqinisekisa, besikhuluma ngokusebenza ngamanani afana Any, ezingazange zihlolwe nhlobo. Lokhu kuholele ekulahlekelweni okukhulu kokunemba kokuthayipha, ikakhulukazi ezigabeni zokuqala zokufuduka. Le ndlela isebenze ngokumangalisayo kuze kube manje, nakuba isimo esivamile siwukuthi ukwengeza amafayela kububanzi bokubuyekezwa kuveza izinkinga kwezinye izingxenye ze-codebase. Esimweni esibi kakhulu, lapho izindawo ezimbili ezizimele zekhodi zihlanganiswa, lapho, ngokuzimela komunye nomunye, izinhlobo zase zihloliwe, kwavela ukuthi izinhlobo zalezi zindawo azihambisani nomunye nomunye. Lokhu kuholele esidingweni sokwenza izinguquko eziningi ezichasiselweni. Uma sibheka emuva manje, siyabona ukuthi bekufanele sengeze amamojula welabhulali abalulekile endaweni yokuhlola uhlobo lwe-mypy maduze. Lokhu kuzokwenza umsebenzi wethu ubikezeleke kakhulu.

Isichasiselo ikhodi endala. Ngenkathi siqala, sasinemigqa engaba yizigidi ezi-4 yekhodi ekhona yePython. Kwacaca ukuthi ukuchasisa yonke le khodi kwakungewona umsebenzi olula. Sidale ithuluzi elibizwa nge-PyAnnotate elingaqoqa ulwazi lohlobo njengoba kwenziwa ukuhlola futhi lingangeza izichasiselo zohlobo kukhodi yakho ngokusekelwe kulwazi oluqoqiwe. Kodwa-ke, asizange sikuqaphele ukwamukelwa okwandile ikakhulukazi kwaleli thuluzi. Ukuqoqa ulwazi lohlobo bekuhamba kancane, futhi izichasiselo ezikhiqizwa ngokuzenzakalela ngokuvamile zidinga ukuhlela okuningi mathupha. Sicabange ukusebenzisa leli thuluzi ngokuzenzakalelayo njalo lapho sibuyekeza ikhodi, noma siqoqa ulwazi lohlobo olusekelwe ekuhlaziyeni umthamo omncane wezicelo zangempela zenethiwekhi, kodwa sanquma ukungakwenzi lokho ngoba noma iyiphi indlela yayiyingozi kakhulu.

Ngenxa yalokho, kungaqashelwa ukuthi iningi lekhodi lichazwe ngesandla ngabanikazi bayo. Ukuze siqondise le nqubo endleleni efanele, silungiselela imibiko yamamojula abalulekile ikakhulukazi nemisebenzi edinga ukuchazelwa. Isibonelo, kubalulekile ukunikeza izichasiselo zohlobo lwemojuli yelabhulali esetshenziswa ezindaweni ezingamakhulu. Kodwa isevisi endala eshintshwayo ayisabalulekile kangako ukuthi ichazwe. Futhi sizama ukusebenzisa ukuhlaziywa okumile ukuze sikhiqize izichasiselo zohlobo zekhodi yefa.

Ukungenisa ngebhayisikili. Ngenhla, ngikhulume ngokungeniswa kwe-cyclic ("i-dependency tangles"), ukuba khona kwakho okwenza kube nzima ukusheshisa i-mypy. Kwadingeka futhi sisebenze kanzima ukuze senze i-mypy isekele zonke izinhlobo zezisho ezibangelwa yilokhu kungenisa okuhamba phambili. Sisanda kuphothula iphrojekthi enkulu yokuklama kabusha isistimu eyalungisa izinkinga eziningi ze-mypy mayelana nokungenisa okuyindilinga. Lezi zinkinga empeleni zisukela ezinsukwini zakuqala zephrojekthi, kusukela ku-Alore, ulimi lokufundisa iphrojekthi ye-mypy eyayigxile kulo ekuqaleni. I-syntax ye-Alore yenza kube lula ukuxazulula izinkinga ngemiyalo yokungenisa eyi-cyclic. I-mypy yesimanje izuze imikhawulo ethile ekusetshenzisweni kwayo kwangaphambilini, okunomqondo olula (obekufanela kahle i-Alore). I-Python yenza ukusebenza ngokungenisa okuyisiyingi kube nzima, ikakhulukazi ngoba izinkulumo azicaci. Isibonelo, umsebenzi ozokwenziwa ungase empeleni uchaze uhlobo lwesiteketiso. I-Mypy ayihlali ikwazi ukuthola izinto ezinjengalezi kuze kube yilapho iningi le-loop yokungenisa selicutshunguliwe. Kwakungekho ukungaqondakali okunjalo ku-Alore. Izinqumo ezingezinhle ezenziwa ezigabeni zokuqala zokuthuthukiswa kwesistimu zingaletha isimanga esingemnandi kumhleli eminyakeni eminingi kamuva.

Imiphumela: indlela eya emigqeni yekhodi eyizigidi ezingu-5 kanye nama-horizons amasha

Iphrojekthi ye-mypy isihambe indlela ende - kusukela kuma-prototypes okuqala kuya ohlelweni olulawula imigqa eyizigidi ezi-4 yezinhlobo zamakhodi okukhiqiza. Njengoba i-mypy yavela, ukusikisela kohlobo lwePython kwenziwa ngendlela efanayo. Kulezi zinsuku, i-ecosystem enamandla ithuthukile mayelana nokuthayipha ikhodi ye-Python. Inendawo yokusekelwa komtapo wolwazi, iqukethe amathuluzi asizayo ama-IDE nabahleli, inezinhlelo zokulawula izinhlobo eziningana, ngayinye enezinzuzo nezingozi zayo.

Noma ukuhlola uhlobo sekuvele kunikeziwe eDropbox, ngikholwa ukuthi sisesezinsukwini zokuqala zokuthayipha ikhodi yePython. Ngicabanga ukuthi ubuchwepheshe bokuhlola uhlobo buzoqhubeka nokuvela futhi buthuthuke.

Uma ungakasebenzisi uhlobo lokuhlola kuphrojekthi yakho enkulu yePython, yazi-ke ukuthi manje isikhathi esihle kakhulu sokuqala ukuthuthela ekubhaleni okumile. Ngike ngakhuluma nalabo abenze inguquko efanayo. Akekho noyedwa owazisola. Ukuhlola uhlobo kwenza iPython ibe ulimi olufaneleka kangcono ukuthuthukisa amaphrojekthi amakhulu kune β€œPython evamile.”

Bafundi abathandekayo! Ingabe usebenzisa ukuhlola uhlobo kumaphrojekthi akho ePython?

Indlela yokuhlola imigqa eyizigidi ezi-4 yekhodi yePython. Ingxenye 3
Indlela yokuhlola imigqa eyizigidi ezi-4 yekhodi yePython. Ingxenye 3

Source: www.habr.com

Engeza amazwana