Traceback huonekana wakati amri ya usimamizi wa VPN inapoanza, na silika ya kwanza hukimbilia kusakinisha Python nyingine au kuelekeza chaguo-msingi la mfumo mahali pengine. Silika hiyo huchanganya muda wa utekelezaji mbili ambao hauna uhusiano wowote. Moja ni ya mfumo wa uendeshaji na zana zake zilizofungashwa; nyingine ni ya mradi wowote unaojenga. Kubadilisha ya kwanza ili kuridhisha ya pili ndiyo njia ambayo kompyuta ya mezani inayofanya kazi hupoteza msimamizi wake wa vifurushi.

Ulinganisho unaostahili kufanywa ni kati ya sehemu iliyoshindwa kweli na mazingira ya utekelezaji unayoruhusiwa kubadilisha. Karibu kamwe si kitu kimoja.

Maswali mawili ya Python yanayofanana kama moja

Swali la kwanza ni: ni mkalimani gani aliendesha programu iliyochapisha Traceback? La pili ni: mradi wangu unapaswa kutumia mkalimani gani? Kwenye terminal yanaonekana sawa, kwa sababu yote mawili hujibiwa kwa kuandika python3, na yana wamiliki tofauti, njia tofauti za kusasisha na mduara tofauti wa athari.

Zana ya mfumo imefungwa kwa mkalimani ambao usambazaji wake uliitoa nao, pamoja na moduli zilizokusanywa zilizojengwa kwa ABI ya mkalimani huyo. Mradi umefungwa kwa mazingira yoyote unayounda kwa ajili yake. Kuhamisha chaguo-msingi la mfumo hubadilisha la kwanza kwa kila zana kwenye mashine mara moja; kuunda mazingira hubadilisha la pili kwa folda moja.

Ni hatua moja tu kati ya hizo inayoweza kurudishwa nyuma kwa dakika moja. Si ile ya kwanza.

Ni sehemu gani iliyozalisha hitilafu

Soma mstari wa kwanza wa Traceback na faili tendaji lililoizalisha kabla ya kusoma kitu kingine chochote. Frontend ya mstari wa amri, huduma yenye mamlaka na viungo vya API ni sehemu tofauti, na ni baadhi yao tu ndio 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

Mstari wa kwanza wa script hutaja mkalimani itakayotumia, na Traceback ilitoka kwa mkalimani huyo. Swali la kifurushi hukuambia faili ni ya nani, jambo linaloamua ni nani anayeruhusiwa kuibadilisha. Hali ya huduma hujibu swali tofauti kabisa: kama backend yenye mamlaka inayofungua vipindi kweli inafanya kazi.

Hitilafu ya kuingiza moduli, kukataliwa kwa uanzishaji wa D-Bus na vitambulisho vilivyokataliwa ni hatua tatu tofauti. Hitilafu ya kuingiza hutokea kabla ya kipindi chochote kuwepo, kwa hiyo hakuna kiasi cha usanidi wa VPN kitakachoirekebisha, na huduma inayofanya kazi pia haitairekebisha. Kuweka ujumbe katika moja ya hatua hizo tatu ndilo hatua ya kwanza ya kweli.

Mazingira ya mradi yanaweza na hayawezi kurekebisha nini

Mazingira ya mradi hutatua tatizo la mradi: matoleo kamili ya maktaba ambayo programu moja inahitaji, yakitengwa na kila kitu kingine. Hilo ni muhimu kweli, na ndicho kifaa sahihi wakati programu inayoshindwa ni script yako mwenyewe.

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

Amri ya pili inaonyesha ni nakala gani ya viungo mkalimani fulani anayeweza kuona, na ndiyo njia ya haraka zaidi ya kutofautisha kifurushi kilichokosekana na kilichofichwa. Iendeshe kwa mkalimani ambao script inayoshindwa inatumia, si kwa mwingine unaofanya kazi kwa bahati.

Kitu ambacho mazingira ya mradi hayawezi kufanya ni kurekebisha frontend iliyofungashwa na usambazaji. Vitegemezi vya programu hiyo vilijengwa kwa mkalimani aliyechaguliwa na msimamizi wa vifurushi, na kuiendesha ndani ya mazingira ya mradi wako ama hushindwa au huzalisha mchanganyiko ambao hakuna anayeusaidia. Kuingiza njia ndani yake kwa kigezo cha mazingira ni kosa lilelile lenye hatua za ziada: umebadilisha kile kifaa kinachopakia bila kubadilisha kile kilichojaribiwa dhidi yake. Kubadilishana huko kunaonekana kama marekebisho kwa muda wote unaochukua kufikia uingizaji unaofuata.

Kwa nini kuelekeza mkalimani wa mfumo ni mtego

Kubadilisha mkalimani chaguo-msingi kunavutia kwa sababu kunaonekana kurekebisha Traceback kwa amri moja. Pia huvunja dhana ambayo kila zana ya Python iliyofungashwa kwenye mwenyeji ilijengwa juu yake, na hitilafu huonekana baadaye na mahali pasipohusiana.

Mifumo ya kuchagua mbadala ilibuniwa kubadilisha kati ya utekelezaji sawa, si kusakinisha lugha mpya chini ya moduli za zamani zilizokusanywa. Viendelezi vilivyokusanywa hujengwa kwa ABI mahususi, kwa hiyo moduli iliyoingizwa jana inaweza kushindwa kupakiwa leo bila kifurushi kimoja kuondolewa.

Pia kuna mtego wa majina katika ushauri ambao watu hupata. Amri python bila toleo haina maana moja ya jumla kati ya usambazaji na mazingira, na kuichukulia kama kisawe kisichobadilika cha toleo kuu fulani huzalisha marekebisho yanayofanya kazi tu kwenye mashine ilipoandikwa. Soma sera ya mfumo ulio mbele yako, si ile iliyo kwenye chapisho la blogu.

Majaribio ya ukubalifu yaliyotenganishwa

Mwishoni panafaa majaribio mawili, na kufaulu moja hakusemi chochote kuhusu lingine. La kwanza ni kwamba amri ya mteja inayosaidiwa inafanya kazi na mkalimani iliyofungashwa kwa ajili yake. La pili ni kwamba huduma yenye mamlaka huanzisha kipindi na handaki hubeba trafiki.

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

Wakati unafanya kazi, tunza njia huru ya kuingia kwenye mashine, hasa ikiwa VPN inachukua ufikiaji wako pekee wa kiutawala. Mabadiliko kwenye mkalimani wa mfumo ni aina hiyo hiyo ya uhariri ambayo inaweza kuondoa ufikiaji huo katikati.

Ikiwa hitilafu ni moduli inayokosekana kwa zana ya mfumo, marekebisho ni operesheni ya kifurushi kupitia mtiririko wa kazi unaosaidiwa. Ikiwa hitilafu ni mgongano wa matoleo katika mradi wako mwenyewe, marekebisho ni mazingira. Kuchagua kati ya hizo mbili ni uamuzi wote, na unaamuliwa na ni programu gani iliyochapisha Traceback.

Makala zinazohusiana