Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 3

Re u hlokomelisa karolo ea boraro ea phetolelo ea boitsebiso bo mabapi le tsela eo Dropbox e ileng ea e nka ha e kenya ts'ebetsong mokhoa oa ho hlahloba mofuta oa khoutu ea Python.

Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 3

→ Likarolo tse fetileng: pele и ea bobeli

Ho fihlella mela e limilione tse 4 ea khoutu e tlatsitsoeng

Phephetso e 'ngoe e kholo ('me ea bobeli e amehileng ka ho fetisisa har'a ba ileng ba hlahlojoa ka hare) e ne e le ho eketsa palo ea khoutu e koahetsoeng ke licheke tsa mofuta ho Dropbox. Re lekile mekhoa e mengata ea ho rarolla bothata bona, ho tloha ka tlhaho ho holisa boholo ba codebase e thaepileng ho isa ho tsepamisitseng boiteko ba sehlopha sa mypy mabapi le tlhahiso ea mofuta o ikemetseng le o matla. Qetellong, ho ne ho bonahala eka ha ho na leano le bonolo la ho hapa, empa re ile ra khona ho finyella khōlo e potlakileng ea molumo oa khoutu e hlalositsoeng ka ho kopanya mekhoa e mengata.

Ka lebaka leo, polokelo ea rona e kholo ka ho fetisisa ea Python (e nang le khoutu ea morao-rao) e na le mela e ka bang limilione tse 4 ea khoutu e hlalositsoeng. Mosebetsi oa ho thaepa khoutu e tsitsitseng o ile oa phethoa ka lilemo tse ka bang tharo. Hona joale Mypy e ts'ehetsa mefuta e fapaneng ea litlaleho tsa tšireletso ea khoutu e etsang hore ho be bonolo ho lekola tsoelo-pele ea ho thaepa. Haholo-holo, re ka hlahisa litlaleho ka khoutu e nang le lintho tse sa hlakang ka mefuta, joalo ka mohlala, tšebeliso e hlakileng ea mofuta o itseng. Any ka litlhaloso tse ke keng tsa netefatsoa, ​​kapa ka lintho tse kang ho tlisa lilaebrari tsa batho ba bang tse se nang litlhaloso. E le karolo ea morero oa ho ntlafatsa ho nepahala ha tlhahlobo ea mofuta ho Dropbox, re kentse letsoho ho ntlafatseng litlhaloso tsa mofuta (tse bitsoang lifaele tsa stub) bakeng sa lilaebrari tse ling tse tsebahalang tse bulehileng sebakeng sa polokelo ea Python. tlanyitsoe.

Re kentse ts'ebetsong (le ho lumellana le li-PEP tse latelang) likarolo tse ncha tsa mofuta oa mofuta o lumellang mefuta e nepahetseng haholoanyane bakeng sa lipaterone tse itseng tsa Python. Mohlala o hlokomelehang oa sena ke TypeDict, e fanang ka mefuta ea lidikishinari tse kang JSON tse nang le sete e tsitsitseng ea linotlolo tsa likhoele, e 'ngoe le e' ngoe e na le boleng ba mofuta oa eona. Re tla tsoela pele ho atolosa mofuta oa tsamaiso. Mohato oa rona o latelang e kanna ea ba ho ntlafatsa ts'ehetso bakeng sa bokhoni ba lipalo ba Python.

Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 3
Nomoro ea mela ea khouto e hlakisitsoeng: seva

Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 3
Nomoro ea mela ea khouto e hlakisitsoeng: moreki

Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 3
Kakaretso ea methalo ea khoutu e hlalositsoeng

Mona ke kakaretso ea likarolo tsa mantlha tsa lintho tseo re li entseng ho eketsa palo ea khoutu e hlalositsoeng ho Dropbox:

Matla a tlhaloso. Re ile ra eketsa butle-butle litlhoko tsa ho tiea ha khoutu e ncha. Re ile ra qala ka malebela a linter a ileng a fana ka tlhahiso ea ho kenyelletsa litlhaloso ho lifaele tse seng li ntse li e-na le litlhaloso. Hona joale re hloka litlhaloso tsa mofuta ho lifaele tse ncha tsa Python le lifaeleng tse ngata tse teng.

Ho ngola litlaleho. Re romella lihlopha litlaleho tsa beke le beke mabapi le boemo ba ho ngola khouto ea tsona le ho fana ka likeletso mabapi le se lokelang ho hlakisoa pele.

Ho tsebahala ha mypy. Re bua ka mypy liketsahalong le ho bua le lihlopha ho li thusa ho qala ka litlhaloso tsa mofuta.

Likhetho. Re etsa lipatlisiso tsa basebelisi nako le nako ho fumana mathata a maholo. Re ikemiselitse ho ea hole haholo ho rarolla mathata ana (esita le ho theha puo e ncha ho potlakisa mypy!).

Tshebetso. Re ntlafalitse ts'ebetso ea mypy haholo ka ho sebelisa daemon le mypyc. Sena se entsoe ho lokisa litšitiso tse hlahang nakong ea ts'ebetso ea litlhaloso, le ho khona ho sebetsa ka bongata ba khoutu.

Ho kopanya le bahlophisi. Re thehile lisebelisoa ho ts'ehetsa ho tsamaisa mypy ho bahlophisi ba tsebahalang ho Dropbox. Sena se kenyelletsa PyCharm, Vim le VS Code. Sena se nolofalitse haholo ts'ebetso ea ho hlakisa khoutu le ho hlahloba ts'ebetso ea eona. Mefuta ena ea liketso e tloaelehile ha ho hlakisoa khoutu e teng.

Tlhahlobo e tsitsitseng. Re thehile sesebelisoa sa ho fana ka li-signature tsa ts'ebetso re sebelisa lisebelisoa tsa tlhahlobo tse tsitsitseng. Sesebelisoa sena se ka sebetsa feela maemong a batlang a le bonolo, empa se re thusitse ho eketsa tšireletso ea mofuta oa khoutu ntle le boiteko bo boholo.

Tšehetso bakeng sa lilaebrari tsa batho ba bang. Boholo ba merero ea rona e sebelisa SQLAlchemy toolkit. Ho nka monyetla ka matla a matla a Python ao mefuta ea PEP 484 e sa khoneng ho e etsa mohlala ka kotloloho. Re, ho latela PEP 561, re thehile faele e lumellanang ea stub mme ra ngola plugin bakeng sa mypy (mohloli o bulehileng), e ntlafatsang tšehetso ea SQLAlchemy.

Mathata ao re kopaneng le ona

Ha se ka mehla ho neng ho le bonolo ho rona ho ea ho mela e limilione tse 4 ea khoutu e tlatsitsoeng. Tseleng ena re ile ra kopana le likoti tse ngata mme ra etsa liphoso tse 'maloa. Ana ke a mang a mathata ao re kopaneng le ona. Re tšepa hore ho bua ka bona ho tla thusa ba bang ho qoba mathata a tšoanang.

Lifaele tse sieo. Re ile ra qala mosebetsi oa rōna ka ho hlahloba lifaele tse seng kae feela. Ntho efe kapa efe e sa kenyelletsoeng lifaeleng tsena ha ea hlahlojoa. Lifaele li ile tsa kenngoa lenaneng la ho skena ha litlhaloso tsa pele li hlaha ho tsona. Haeba ho na le ho hong ho neng ho romelloa ho tsoa ho module e ka ntle ho sebaka sa netefatso, re ne re bua ka ho sebetsa ka litekanyetso tse kang. Any, tse sa kang tsa lekoa ho hang. Sena se ile sa lebisa tahlehelong e kholo ea ho ngola ka nepo, haholo-holo methating ea pele ea ho falla. Mokhoa ona o sebelitse ka mokhoa o makatsang ho fihlela joale, le hoja boemo bo tloaelehileng ke hore ho eketsa lifaele sebakeng sa tlhahlobo ho senola mathata likarolong tse ling tsa codebase. Boemong bo bobe ka ho fetisisa, ha libaka tse peli tse arohaneng tsa khoutu li kopantsoe, moo, ka ntle ho e mong, mefuta e seng e hlahlobiloe, ho ile ha fumaneha hore mefuta ea libaka tsena e ne e sa lumellane. Sena se ile sa lebisa tlhokahalong ea ho etsa liphetoho tse ngata ho litlhaloso. Ha re hetla morao hona joale, rea hlokomela hore re ka be re kentse li-module tsa laeborari ea mantlha sebakeng sa tlhahlobo ea mofuta oa mypy haufinyane. Sena se ne se tla etsa hore mosebetsi oa rona o tsebe ho feta.

E hlalosa khoutu ea khale. Ha re qala, re ne re e-na le mela e ka bang limilione tse 4 ea khoutu e teng ea Python. Ho ne ho hlakile hore ho hlakisa khoutu ena kaofela e ne e se mosebetsi o bonolo. Re thehile sesebelisoa se bitsoang PyAnnotate se ka bokellang lintlha tsa mofuta ha liteko li ntse li etsoa, ​​​​'me se ka eketsa litlhaloso tsa mofuta oa khoutu ea hau ho latela lintlha tse bokeletsoeng. Leha ho le joalo, ha re e-s'o hlokomele ho amoheloa ka ho khetheha ho atileng ha sesebelisoa sena. Ho bokella tlhahisoleseling ho ne ho lieha, 'me litlatsetso tse itlhahisang hangata li ne li hloka liphetoho tse ngata ka letsoho. Re ile ra nahana ka ho sebelisa sesebelisoa sena ka bohona nako le nako ha re hlahloba khoutu, kapa ho bokella tlhahisoleseling ea mofuta o ipapisitseng le ho sekaseka palo e nyane ea likopo tsa nnete tsa marang-rang, empa re nkile qeto ea ho se etse joalo hobane mokhoa ona o ne o le kotsi haholo.

Ka lebaka leo, ho ka hlokomeloa hore boholo ba khoutu e ne e hlalosoa ka letsoho ke beng ba eona. E le ho tataisa ts'ebetso ena ka tsela e nepahetseng, re lokisa litlaleho ka li-module tsa bohlokoa haholo le mesebetsi e hlokang ho hlakisoa. Mohlala, ho bohlokoa ho fana ka litlhaloso tsa mofuta oa mojule oa laeborari o sebelisoang libakeng tse makholo. Empa tšebeletso ea khale e nkeloang sebaka ke e ncha ha e sa le bohlokoa hakaalo ho e hlalosa. Re boetse re leka ho sebelisa tlhahlobo e tsitsitseng ho hlahisa litlhaloso tsa mofuta oa khoutu ea lefa.

Li-cyclic tse tsoang kantle ho naha. Ka holimo, ke buile ka li-cyclic imports ("dependency tangles"), boteng ba eona bo entseng hore ho be thata ho potlakisa mypy. Hape re ile ra tlameha ho sebetsa ka thata ho etsa hore mypy e tšehetse mefuta eohle ea maele a bakoang ke lintho tsena tse tsoang kantle ho naha. Haufinyane tjena re phethetse projeke e kholo ea ho hlophisa bocha tsamaiso e lokisitseng boholo ba litaba tsa mypy mabapi le ho reka kantle ho naha. Mathata ana a hlile a bakoa ke matsatsi a pele a morero, morao ho tloha Alore, puo ea thuto eo morero oa mypy o neng o tsepamisitsoe ho oona qalong. Alore syntax e etsa hore ho be bonolo ho rarolla mathata ka litaelo tsa cyclic import. Mypy ea sejoale-joale e futsitse mefokolo e itseng ts'ebetsong ea eona ea pejana, e bonolo (e neng e lekana hantle bakeng sa Alore). Python e etsa hore ho sebetsa le lintho tse tsoang kantle ho naha ho be thata, haholo hobane mantsoe ha a hlaka. Mohlala, ts'ebetso ea kabelo e kanna ea hlalosa mofuta oa alias. Mypy ha se kamehla e khonang ho bona lintho tse kang tsena ho fihlela boholo ba loop ea ho kenya e se e sebelitsoe. Ho ne ho se na lipelaelo tse joalo ho Alore. Liqeto tse fosahetseng tse entsoeng methating ea pele ea nts'etsopele ea sistimi li ka hlahisa ntho e makatsang ho moetsi oa lenaneo lilemo tse ngata hamorao.

Liphetho: tsela e eang ho mela e limilione tse 5 tsa khoutu le libaka tse ncha

Morero oa mypy o tsamaile hole - ho tloha ho li-prototypes tsa pele ho ea ho sistimi e laolang mela e limilione tse 4 ea mefuta ea likhoutu tsa tlhahiso. Ha mypy e ntse e fetoha, lintlha tsa mofuta oa Python li ne li lekanyelitsoe. Matsatsing ana, ho na le tikoloho e matla ea tikoloho e ntlafalitsoeng mabapi le ho thaepa khoutu ea Python. E na le sebaka sa ts'ehetso ea laebrari, e na le lisebelisoa tse thusang bakeng sa li-IDE le bahlophisi, e na le mekhoa e mengata ea ho laola mefuta, e 'ngoe le e' ngoe e na le melemo le boiketlo ba eona.

Leha tlhahlobo ea mofuta e se e fanoe ho Dropbox, ke lumela hore re ntse re le matsatsing a pele a ho thaepa khoutu ea Python. Ke nahana hore theknoloji ea ho hlahloba mefuta e tla tsoela pele ho fetoha le ho ntlafala.

Haeba ha u so sebelise mofuta oa ho hlahloba morerong oa hau o moholo oa Python, joale tseba hore joale ke nako e ntle ea ho qala ho thaepa ka mokhoa o tsitsitseng. Ke buile le ba entseng phetoho e tšoanang. Ha ho le ea mong oa bona ea ileng a ikoahlaea. Ho hlahloba mofuta ho etsa hore Python e be puo e loketseng ho etsa merero e meholo ho feta "Python e tloaelehileng."

Babali ba ratehang! Na u sebelisa mofuta oa ho hlahloba merero ea hau ea Python?

Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 3
Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 3

Source: www.habr.com

Eketsa ka tlhaloso