Iyo nzira yekutarisa 4 miriyoni mitsetse yePython kodhi. Chikamu 3

Isu tinopa kwauri chikamu chechitatu chekududzirwa kwezvinhu nezve nzira yakatorwa neDropbox pakuita mhando yekutarisa system yePython kodhi.

Iyo nzira yekutarisa 4 miriyoni mitsetse yePython kodhi. Chikamu 3

β†’ Zvikamu zvakapfuura: kutanga ΠΈ chechipiri

Kusvika 4 miriyoni mitsetse yekodhi yataipa

Rimwe dambudziko guru (uye rechipiri rinonyanya kunetseka pakati pevakaongororwa mukati) raive kuwedzera huwandu hwekodhi yakavharwa nemhando yekuongorora muDropbox. Takaedza nzira dzinoverengeka dzekugadzirisa dambudziko iri, kubva pakukura saizi yetaipa codebase kusvika kutarisisa kuedza kwechikwata chemypy pane static uye dynamic automated type inference. Pakupedzisira, zvaiita sekunge pakanga pasina nzira yekukunda iri nyore, asi takakwanisa kukurumidza kukura muhuwandu hwekodhi yakatsanangurwa nekubatanidza nzira dzakawanda.

Nekuda kweizvozvo, yedu hombe yePython repository (ine backend kodhi) ine ingangoita 4 miriyoni mitsara yekodhi yakatsanangurwa. Basa rekuita static code typing rakapedzwa mukati memakore matatu. Mypy ikozvino inotsigira marudzi akasiyana-siyana ekodhi yekuvhara mishumo inoita kuti zvive nyore kutarisa kufambira mberi kwekunyora. Kunyanya, isu tinokwanisa kuburitsa mishumo pane kodhi ine ambiguities mumhando, senge, semuenzaniso, kushandiswa kwemhando yemhando. Any mune zviziviso zvisingagone kusimbiswa, kana nezvinhu zvakaita sekuunza maraibhurari ebato rechitatu asina zvirevo zvemhando. Sechikamu chepurojekiti yekuvandudza iko kurongeka kwemhando yekutarisa muDropbox, isu takabatsira mukuvandudza tsananguro yemhando (inodaidzwa kuti stub mafaera) kune mamwe akakurumbira akavhurwa maturabhurari munzvimbo yepakati Python repository. typeshed.

Isu takaita (uye takamisikidza mune dzakazotevera maPEP) maficha matsva eiyo mhando system inobvumira mamwe chaiwo marudzi emamwe chaiwo maPython mapatani. Muenzaniso unozivikanwa weizvi TypeDict, iyo inopa marudzi eJSON-akafanana nemaduramazwi ane yakagadzika seti yemakiyi etambo, rimwe nerimwe riine kukosha kwerudzi rwayo. Ticharamba tichiwedzera mhando yemhando. Nhanho yedu inotevera ingangove yekuvandudza rutsigiro rwePython's manhamba kugona.

Iyo nzira yekutarisa 4 miriyoni mitsetse yePython kodhi. Chikamu 3
Nhamba yemitsara yekodhi yakatsanangurwa: server

Iyo nzira yekutarisa 4 miriyoni mitsetse yePython kodhi. Chikamu 3
Nhamba yemitsara yekodhi yakatsanangurwa: mutengi

Iyo nzira yekutarisa 4 miriyoni mitsetse yePython kodhi. Chikamu 3
Nhamba yese yemitsara yekodhi yakatsanangurwa

Heino mhedziso yeakanyanya maficha ezvinhu zvatakaita kuwedzera huwandu hweakatsanangurwa kodhi muDropbox:

Annotation rigor. Isu takawedzera zvishoma nezvishoma zvinodiwa zvekuomarara kweanozivisa kodhi nyowani. Takatanga ne linter matipi ayo aikurudzira kuwedzera zvirevo kumafaira anga atova nezvimwe zvinotsanangurwa. Isu ikozvino tinoda zvirevo zvemhando mumafaira matsva ePython uye mune akawanda mafaera aripo.

Kutaipa mishumo. Isu tinotumira zvikwata vhiki nevhiki mishumo padanho rekunyora mukodhi yavo uye tinopa zano rekuti chii chinofanira kutanga chaziviswa.

Popularization of mypy. Isu tinotaura nezve mypy pazviitiko uye tinotaura nezvikwata kuti zvivabatsire kutanga nemhando yezvinyorwa.

Polls. Isu tinoitisa ongororo dzevashandisi nguva nenguva kuona matambudziko makuru. Takagadzirira kuenda kure chaizvo mukugadzirisa matambudziko aya (kunyangwe kugadzira mutauro mutsva kuti ukurumidze mypy!).

Performance. Isu takavandudza zvakanyanya kuita kwemypy nekushandisa iyo daemon uye mypyc. Izvi zvakaitwa kuti zvigadzirise zvipingamupinyi zvinomuka panguva yekunyora zvinyorwa, uye kuitira kukwanisa kushanda nehuwandu hwekodhi.

Kubatanidzwa nevapepeti. Isu takavaka maturusi ekutsigira kumhanya mypy mune edhita anozivikanwa paDropbox. Izvi zvinosanganisira PyCharm, Vim uye VS Code. Izvi zvakarerutsa zvakanyanya maitiro ekutsanangudza kodhi uye kutarisa kushanda kwayo. Aya marudzi ezviito akajairika pakutsanangura kodhi iripo.

Static analysis. Isu takagadzira chishandiso kuti infer masiginecha ebasa tichishandisa static yekuongorora maturusi. Ichi chishandiso chinongoshanda mumamiriro akareruka, asi chakatibatsira kuwedzera kodhi yedu yemhando yekuvhara pasina kushanda nesimba.

Tsigiro yemaraibhurari ebato rechitatu. Mazhinji emapurojekiti edu anoshandisa SQLAlchemy toolkit. Zvinotora mukana wekusimba kwePython iyo mhando dzePEP 484 dzisingakwanise kutevedzera zvakananga. Isu, maererano nePEP 561, takagadzira iyo inoenderana stub faira uye takanyora plugin ye mypy (open source), iyo inovandudza SQLAlchemy rutsigiro.

Matambudziko atakasangana nawo

Nzira yekuenda kune 4 miriyoni mitsetse yekodhi yataipa haina kugara iri nyore kwatiri. Munzira iyi takasangana nemakomba akawanda uye tikaita zvikanganiso zvakawanda. Aya ndiwo mamwe ematambudziko atakasangana nawo. Tinovimba kuti kutaura nezvavo kuchabetsera vamwe kudzivisa zvinetso zvakafanana.

Mafaira asipo. Takatanga basa redu nekungotarisa mafaera mashoma. Zvese zvisina kuiswa mumafaira aya hazvina kutariswa. Mafaira akawedzerwa kune iyo scanning runyorwa apo yekutanga zvirevo zvakaonekwa mavari. Kana chimwe chinhu chaitengeswa kubva kune module iri kunze kwechiyero chekusimbisa, saka taitaura nezvekushanda nehunhu hwakadai. Any, izvo zvisina kuedzwa zvachose. Izvi zvakaita kuti pave nekurasikirwa kukuru kwekunyora, kunyanya mumatanho ekutanga ekutama. Iyi nzira yakashanda zvinoshamisa kusvika ikozvino, kunyange zvazvo mamiriro ezvinhu ekuti kuwedzera mafaira kuhuwandu hwekuongorora kunoratidza matambudziko mune dzimwe nzvimbo dzekodhidhi. Mumamiriro ezvinhu akaipisisa, apo nzvimbo mbiri dzakaparadzana dzekodhi dzakabatanidzwa, umo, zvakasununguka kune mumwe nemumwe, marudzi akanga atoongororwa, zvakazoitika kuti mhando dzenzvimbo idzi dzakanga dzisingaenderani. Izvi zvakakonzera kudikanwa kwekuchinja kwakawanda kune zvirevo. Tichitarisa kumashure ikozvino, tinoona kuti isu taifanira kunge tawedzera epakati raibhurari modules kune mypy's mhando yekutarisa nzvimbo nekukurumidza. Izvi zvaizoita kuti basa redu rinyatsofanotaurwa.

Inozivisa kodhi yekare. Patakatanga, takanga tine mitsara inosvika mamiriyoni mana yekodhi yePython iripo. Zvaive pachena kuti kududzira kodhi iyi yese raive risiri basa riri nyore. Isu takagadzira chishandiso chinodaidzwa kuti PyAnnotate chinogona kuunganidza ruzivo rwemhando sezvo bvunzo dzichiitwa uye inogona kuwedzera zvinyorwa zvemhando kukodhi yako zvichienderana neruzivo rwakaunganidzwa. Nekudaro, isu hatisati taona kunyanya kupararira kwechishandiso ichi. Kuunganidza ruzivo rwemhando kwainonoka, uye zvinongogadzirwa otomatiki zvaiwanzoda akawanda magadzirirwo emaoko. Isu takafunga nezvekushandisa otomatiki chishandiso ichi pese patinoongorora kodhi, kana nezve kuunganidza ruzivo rwemhando zvichienderana nekuongorora kweimwe vhoriyamu yezvikumbiro zvetiweki chaiyo, asi takasarudza kusadaro nekuti nzira iyi yaive nenjodzi.

Nekuda kweizvozvo, zvinogona kucherechedzwa kuti yakawanda yekodhi yakatsanangurwa nemaoko nevaridzi vayo. Kuti titungamirire maitiro aya munzira kwayo, tinogadzirira mishumo pane akakosha mamodule uye mabasa anoda kutsanangurwa. Semuyenzaniso, zvakakosha kuti upe mhando zvirevo zvemodule yeraibhurari inoshandiswa mumazana enzvimbo. Asi sevhisi yekare iri kutsiviwa neitsva haichakoshi zvakanyanya kutsanangura. Isu tiri kuyedza zvakare kushandisa static ongororo kugadzira mhando zvirevo zvelegacy kodhi.

Cyclic imports. Pamusoro, ndakataura nezve cyclic imports (iyo "dependency tangles"), kuvepo kwaiita kuti zviome kumhanyisa mypy. Isu taifanirawo kushanda nesimba kuti mypy itsigire marudzi ese emadimikira anokonzerwa neaya ma cyclic import. Isu nguva pfupi yadarika takapedza chirongwa chikuru chekugadzirisazve chirongwa chakagadzirisa nyaya zhinji dzemypy maererano nekutengwa kunze kwenyika. Matambudziko aya akabva pamazuva ekutanga epurojekiti, kubva kuAlore, mutauro wekudzidzisa uyo purojekiti yemypy yakatanga kutariswa. Alore syntax inoita kuti zvive nyore kugadzirisa matambudziko ne cyclic yekuraira mirairo. Mypy yemazuva ano yakagara nhaka yezvimwe zvipimo kubva kune yayo yekutanga, pfungwa dzakapfava (iyo yaive yakanakira Alore). Python inoita kuti kushanda nezvinotenderedzwa kunze kunetse, kunyanya nekuti matauriro haana kujeka. Semuyenzaniso, basa rekuita rinogona kunyatso tsanangura mhando yezita. Mypy haigaro kwanisa kuona zvinhu zvakaita seizvi kudzamara yakawanda yekupinza loop yagadziriswa. Kwakanga kusina kusajeka kwakadaro muAlore. Sarudzo dzisina kunaka dzakaitwa mumatanho ekutanga ekuvandudza system dzinogona kupa kushamisika kusingafadzi kumugadziri makore mazhinji gare gare.

Mhedzisiro: nzira inoenda kune 5 miriyoni mitsetse yekodhi uye horizons nyowani

Iyo mypy purojekiti yasvika kure - kubva pakutanga prototypes kune sisitimu inodzora 4 miriyoni mitsetse yemhando yekodhi yekugadzira. Sezvo mypy yakashanduka, mazano erudzi rwePython akamisikidzwa. Mazuva ano, ecosystem ine simba yakagadziridzwa yakatenderedza kutaipa Python kodhi. Iine nzvimbo yerutsigiro rweraibhurari, ine maturusi ebetsero eIDE uye vapepeti, ine akati wandei emhando yekudzora masisitimu, imwe neimwe ine zvayakanakira nezvayakaipira.

Kunyangwe kutarisa kwemhando kwatopihwa kuDropbox, ndinotenda tichiri mumazuva ekutanga ekunyora Python kodhi. Ini ndinofunga mhando yekutarisa matekinoroji icharamba ichishanduka nekuvandudza.

Kana usati watoshandisa mhando yekutarisa mune yako hombe-yePython purojekiti, saka ziva kuti ikozvino inguva yakanaka yekutanga kutamira kune static typing. Ndakataura nevakaita shanduko yakafanana. Hapana kana mumwe wavo akazvidemba. Kutarisa kwemhando kunoita kuti Python ive mutauro unonyatsokodzera kugadzira mapurojekiti makuru pane "yakajairika Python."

Vanodiwa vaverengi! Iwe unoshandisa mhando yekutarisa mumapurojekiti ako ePython?

Iyo nzira yekutarisa 4 miriyoni mitsetse yePython kodhi. Chikamu 3
Iyo nzira yekutarisa 4 miriyoni mitsetse yePython kodhi. Chikamu 3

Source: www.habr.com

Voeg