Traceback jidher meta jibda kmand tal-amministrazzjoni tal-VPN, u l-ewwel istint jiġri lejn li jinstalla Python differenti jew li jindika l-default tas-sistema x'imkien ieħor. Dak l-istint iħallat żewġ runtimes li m'għandhom xejn x'jaqsmu ma' xulxin. Waħda tappartjeni lis-sistema operattiva u l-għodod ippakkjati tagħha; l-oħra tappartjeni lil kwalunkwe proġett li qed tibni. Li tbiddel l-ewwel biex tissodisfa t-tieni huwa kif desktop li jaħdem jitlef il-maniġer tal-pakketti tiegħu.

It-tqabbil li jiswa huwa bejn il-komponent li fil-fatt falla u r-runtime li inti għandek id-dritt tibdel. Kważi qatt mhumiex l-istess oġġett.

Żewġ mistoqsijiet dwar Python li jidhru bħala wieħed

L-ewwel mistoqsija hi: liema interpreter ħa l-programm li stampa t-Traceback? It-tieni hi: liema interpreter għandu juża l-proġett tiegħi? F'terminal jidhru identiċi, għax it-tnejn jingħataw tweġiba billi tittajpja python3, u għandhom sidien differenti, mogħdijiet ta' aġġornament differenti u raġġi ta' impatt differenti.

Għodda tas-sistema hija marbuta mal-interpreter li ġiet ikkonsenjata miegħu d-distribuzzjoni tagħha, flimkien mal-moduli kkompilati mibnija kontra l-ABI ta' dak l-interpreter. Proġett huwa marbut ma' kwalunkwe ambjent li toħloq għalih. Li ċċaqlaq id-default tas-sistema jbiddel l-ewwel għal kull għodda fil-magna f'daqqa; li toħloq ambjent ibiddel it-tieni għal direttorju wieħed.

Hija biss waħda minn dawk l-azzjonijiet li tista' tiġi mreġġgħa f'minuta. Mhijiex l-ewwel waħda.

Liema komponent ipproduċa l-iżball

Aqra l-ewwel linja tat-Traceback u l-eżekuttabbli li pproduċieh qabel taqra xi ħaġa oħra. Il-frontend tal-linja tal-kmand, is-servizz privileġġjat u l-binding tal-API huma biċċiet separati, u wħud minnhom biss huma Python.

command -v openvpn3
head -n 1 "$(command -v openvpn3)"
dpkg -S "$(command -v openvpn3)" 2>/dev/null
systemctl status openvpn3-service-client --no-pager

L-ewwel linja ta' skript issemmi l-interpreter li se juża, u dak huwa l-interpreter li minnu ġie t-Traceback. It-talba għall-pakkett tgħidlek lil min jappartjeni l-fajl, u dan jiddeċiedi min jista' jibdlu. L-istatus tas-servizz iwieġeb mistoqsija kompletament oħra: jekk il-backend privileġġjat li fil-fatt jiftaħ is-sessjonijiet huwiex miexi.

Żball fl-importazzjoni ta' modulu, rifjut ta' attivazzjoni D-Bus u kredenzjali miċħuda huma tliet stadji differenti. Żball fl-importazzjoni jiġri qabel ma teżisti kwalunkwe sessjoni, għalhekk l-ebda ammont ta' konfigurazzjoni tal-VPN mhu se jsewwih, u lanqas servizz li jaħdem mhu se jsewwih. Li tqiegħed il-messaġġ f'wieħed minn dawk it-tliet stadji huwa l-ewwel pass reali.

X'tista' u x'ma tistax issewwi sistema ta' proġett

Ambjent ta' proġett isolvi problema ta' proġett: il-verżjonijiet eżatti tal-libreriji li teħtieġ applikazzjoni waħda, iżolati minn kull ħaġa oħra. Dan huwa tassew utli, u hija l-għodda t-tajba meta l-programm li qed ifalli huwa skript tiegħek.

uv run --python 3.11 app.py
python3 -c 'import openvpn3; print(openvpn3.__file__)'

It-tieni kmand juri liema kopja tal-binding jista' jara interpreter partikolari, u dan huwa l-eħfef mod biex tiddistingwi pakkett nieqes minn pakkett mgħotti. Mexxih bl-interpreter li juża l-iskript li qed ifalli, mhux b'ieħor li jaħdem b'kumbinazzjoni.

Dak li ambjent ta' proġett ma jistax jagħmel huwa li jsewwi frontend ippakkjat mid-distribuzzjoni. Id-dipendenzi ta' dak il-programm inbnew għall-interpreter li għażel il-maniġer tal-pakketti, u li tmexxih fl-ambjent tal-proġett tiegħek jew ifalli jew jipproduċi taħlita li ħadd ma jappoġġja. Li tittinjetta mogħdijiet fih b'varjabbli tal-ambjent hija l-istess żball b'passi żejda: bdilt dak li tgħabbi l-għodda mingħajr ma bdilt dak li kontra tiegħu ġiet ittestjata. Dak l-iskambju jidher bħala tiswija eżattament daqskemm iddum biex tiltaqa' mal-importazzjoni li jmiss.

Għaliex li tbiddel l-interpreter tas-sistema hija nassa

Li tbiddel l-interpreter default huwa attraenti għax jidher li jsewwi t-Traceback b'kmand wieħed. Huwa wkoll ikisser il-preżunzjoni li fuqha nbniet kull għodda Python ippakkjata fuq il-host, u l-fallimenti jidhru aktar tard u f'postijiet mhux konnessi.

Il-mekkaniżmi tal-għażla tal-alternattivi nħatru biex jaqilbu bejn implimentazzjonijiet ekwivalenti, mhux biex iwaħħlu lingwa aktar ġdida taħt moduli kkompilati eqdem. L-estensjonijiet ikkompilati jinbnew għal ABI speċifiku, għalhekk modulu li ġie importat ilbieraħ jista' llum ma jiġix mgħobbi mingħajr ma jitneħħa lanqas pakkett wieħed.

Hemm ukoll nassa fl-isem fil-pariri li jsibu n-nies. Il-kmand python mingħajr verżjoni m'għandux tifsira universali waħda bejn distribuzzjonijiet u ambjenti, u li tittrattah bħala sinonimu fiss ta' verżjoni maġġuri partikolari tipproduċi tiswijiet li jaħdmu biss fuq il-magna fejn inkiteb. Aqra l-politika tas-sistema li għandek quddiemek minflok dik fil-post tal-blog.

Testijiet ta' aċċettazzjoni separati

Flam-aħħar jispettaw żewġ testijiet, u li tgħaddi wieħed ma jgħid xejn dwar l-ieħor. L-ewwel huwa li l-kmand tal-klijent appoġġjat jaħdem bl-interpreter li għalih ġie ppakkjat. It-tieni huwa li s-servizz privileġġjat jistabbilixxi sessjoni u l-mina twassal it-traffiku.

openvpn3 sessions-list
openvpn3-service-client --help 2>/dev/null | head -n 3
ip -4 addr show tun0

Żomm mezz indipendenti biex tidħol fil-magna waqt li taħdem, speċjalment jekk il-VPN iġorr l-uniku aċċess amministrattiv tiegħek. Bidla fl-interpreter tas-sistema hija eżattament it-tip ta' editjar li jista' jneħħi dak l-aċċess f'nofs triq.

Jekk il-falliment huwa modulu nieqes għal għodda tas-sistema, it-tiswija hija operazzjoni tal-pakkett permezz tal-fluss tax-xogħol appoġġjat. Jekk il-falliment huwa kunflitt ta' verżjoni fil-proġett tiegħek stess, it-tiswija hija ambjent. L-għażla bejn it-tnejn hija d-deċiżjoni kollha, u hija deċiża minn liema programm stampa t-Traceback.

Artikli relatati