Hitilafu mbili tofauti huchapisha ufuatiliaji ule ule wa pip, na ukarabati unaofaa moja hufanya nyingine kuwa mbaya zaidi. Mteja aliyekosa umri wa kutaja mwenyeji aliyepitishwa kwenye handaki anahitaji uboreshaji. Proksi inayotia sahihi upya trafiki inahitaji cheti cha mzizi kinachoaminika, si kupunguza toleo. Tambua ni lipi kati ya mawili ulilonalo kabla ya kuhariri kigezo cha proksi, kwa sababu njia zinaelekea pande tofauti.

Soma fremu za mwisho kabla ya kugusa mipangilio

Mahali ufuatiliaji unapoishia hukuambia tabaka gani lilikata tamaa. Ikiwa fremu za kufunga ziko ndani ya msimbo wa TLS wa urllib3 unaokuja na pip na maandishi yanalalamika kuhusu jina la mwenyeji, maktaba ya mteja haikuweza kumaliza hatua ya uthibitishaji, na hilo ni tatizo la toleo mara nyingi zaidi kuliko tatizo la cheti. Ikiwa maandishi badala yake yanaripoti muunganisho uliokataliwa, jina la proksi lisilotatuliwa au hitilafu ya HTTP 407, mwisho wa handaki ndio mwenye hatia na hakuna uboreshaji utakaobadilisha hilo.

Nasa toleo la pip na vigezo vya proksi katika shell ile ile inayoshindwa. Shell iliyofunguliwa kabla handaki halijainuka hubeba thamani tofauti na ile iliyofunguliwa baadaye, na tofauti kati yao mara nyingi ni utambuzi mzima.

python3 -m pip --version
env | grep -i -E 'proxy|no_proxy'

Wakati mteja ni wa zamani kuliko handaki

Matoleo ya zamani ya pip yalijumuisha msururu wa HTTPS ambao ulipoteza jina la mwenyeji lengwa mara tu soketi ilipofungwa na handaki. Ujumbe wa check_hostname ni kile msururu huo hutoa unapofikia uthibitishaji bila jina la kulinganisha. Uboreshaji huondoa hitilafu kwa sababu mteja mpya huhifadhi jina wakati wa kupeana mikono, na mabadiliko ni ya bei nafuu kiasi cha kujaribu kwanza kila fremu za kufunga zinapoelekeza kwenye msimbo wa TLS unaokuja na pip.

Ikiwa faharasa haiwezi kufikiwa kutoka kwa mashine inayoshindwa, pakua wheel ya sasa kwenye mwenyeji anayeweza na usakinishe kutoka faili. Tumia jina la faili ulilopakua kweli, si toleo lililonakiliwa kutoka chapisho la blogu.

python3 -m pip install --upgrade pip
python3 -m pip install ./pip-24.2-py3-none-any.whl

Wakati proksi inatia sahihi upya trafiki

Proksi inayomaliza TLS na kutoa vyeti upya chini ya mzizi wa shirika huzalisha hitilafu tofauti: certificate verify failed, si malalamiko ya jina la mwenyeji. Tofauti hiyo ndio kidokezo, kwa sababu mteja alifika kwa seva kisha akakataa utambulisho ulioonyeshwa. Ukarabati ni kuamini mzizi huo kwa uwazi, iwe kwa amri moja au kupitia kigezo cha PIP_CERT, ili mteja aweze kujenga mnyororo hadi kile proksi inawasilisha. Kuongeza mzizi kwenye hifadhi ya uaminifu ya mfumo pia hufanya kazi, lakini hubadilisha uaminifu kwa kila programu kwenye mashine, na hilo ni uamuzi mkubwa kuliko kurekebisha usakinishaji mmoja wa kifurushi.

Weka --trusted-host kama utambuzi, kamwe si hali ya kudumu. Huzima ukaguzi uliokuwa ukijaribu kuhifadhi, kwa hivyo cheti kibaya kweli huonekana kizuri baadaye. Ikiwa uliitumia kusakinisha kifurushi kimoja, iondoe na urekebishe mnyororo kabla ya toleo lijalo.

Msimbo wako mwenyewe wa Python hupuuza kabisa usanidi wa pip. Wito wa requests unahitaji proksi na kifurushi kupitishwa mahali ambapo kipindi hicho kinaweza kuviona, ndiyo sababu kizuizi kilicho hapa chini kinaweka vyote viwili kwenye kitu cha kipindi.

pip install --cert /usr/local/share/ca-certificates/corp-root.crt requests
export PIP_CERT=/usr/local/share/ca-certificates/corp-root.crt
s = requests.Session()
s.proxies = {"https": "http://10.20.30.40:8080"}
s.verify = "/usr/local/share/ca-certificates/corp-root.crt"
s.get("https://pypi.org/simple/", timeout=15)

Wakati mwisho au bandari si sahihi

Mteja wa handaki mara nyingi huandika upya proksi ya mfumo wakati akiunganisha, jambo ambalo linaweza kumwacha pip akielekea mwenyeji ambaye hajibu kamwe kwenye bandari hiyo. Jaribu mwisho kwa mteja ambaye si pip kabla ya kubadilisha mpangilio wowote wa pip. Ikiwa curl inashindwa kwa hoja ile ile ya proksi, hitilafu iko juu ya pip na usanidi wowote ndani ya pip hautasaidia.

Bendera ya amri na vigezo vya mazingira vinasema kitu kimoja kwa mawanda tofauti: bendera inatumika kwa wito mmoja, vigezo kwa kila mchakato unaoanzishwa baadaye. Ongeza NO_PROXY kwa faharasa ya ndani ili trafiki ya faragha ya vifurushi ipite njia ya kuzunguka kupitia handaki.

curl -x http://proxy.corp.internal:8080 --head https://pypi.org/simple/
pip install --proxy http://proxy.corp.internal:8080 requests

Hifadhi mpangilio na uthibitishe kuwa njia inafanya kazi

Hifadhi proksi katika usanidi wa pip wenyewe inapopaswa kuishi zaidi ya shell ya sasa, kisha soma tena kile pip itakachotumia kweli. Matokeo ya debug hutaja faili na kigezo kilicho nyuma ya kila thamani, jambo ambalo hutatua mabishano kuhusu kipaumbele haraka kuliko kusoma nyaraka.

Uthibitishaji hutumia wateja wawili kwa makusudi. Ombi kutoka maktaba ya kawaida huthibitisha njia na mnyororo wa uaminifu, wakati upakuaji huthibitisha kuwa usanidi wa pip wenyewe unakubaliana nao. Wakati wa kwanza unafanikiwa na wa pili unashindwa, tofauti iko ndani ya pip na si kwenye mtandao.

pip config set global.proxy http://proxy.corp.internal:8080
pip config debug
python3 -c "import urllib.request as r; print(r.urlopen('https://pypi.org/simple/').status)"
pip download --no-deps -d /tmp/wheelcheck requests
What you seeFirst commandRepair
hostname message inside vendored TLS framespython3 -m pip --versionupgrade the client
certificate verify failed after the tunnelcurl -x http://proxy.corp.internal:8080 --head https://pypi.org/simple/trust the corporate root
connection refused or HTTP 407env | grep -i -E 'proxy|no_proxy'correct host, port or credentials

Makala zinazohusiana