Mae dwy fethiant wahanol yn printio’r un traceback pip, ac mae’r trwsio sy’n addas i’r naill yn gwaethygu’r llall. Mae cleient sy’n rhy hen i enwi gwesteiwr tiwneldig angen uwchradd. Mae procsi sy’n ailosod llofnod y traffig angen tystysgrif gwraidd ymddiried, nid ôl-raddio. Darganfyddwch pa un o’r ddau sydd gennych cyn golygu newidyn procsi, oherwydd mae’r llwybrau’n arwain i gyfeiriadau gwrthgyferbyniol.

Darllenwch y fframiau olaf cyn cyffwrdd â’r gosodiadau

Mae’r man lle mae’r traceback yn gorffen yn dweud pa haen a ildiodd. Os yw’r fframiau cau y tu mewn i god TLS urllib3 sydd wedi’i blygu gyda pip ac mae’r testun yn cwyno am enw gwesteiwr, ni allai’r llyfrgell gleient orffen cam dilysu, ac mae hynny’n broblem fersiwn lawer yn amlach na phroblem tystysgrif. Os yw’r testun yn adrodd cysylltiad a wrthodwyd, enw procsi heb ei ddatrys neu HTTP 407 yn lle hynny, y pen tiwnel sydd ar fai ac ni fydd unrhyw uwchraddiad yn newid hynny.

Cofnodwch fersiwn pip a’r newidynnau procsi yn yr un plisgyn sy’n methu. Mae plisgyn a agorwyd cyn i’r tiwnel godi yn cario gwerthoedd gwahanol i un a agorwyd ar ei ôl, a’r gwahaniaeth rhyngddynt yn aml yw’r diagnosis cyfan.

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

Pan fo’r cleient yn hŷn na’r tiwnel

Roedd rhyddhau hŷn o pip yn cynnwys stac HTTPS a gollai enw’r gwesteiwr cyrchfan unwaith y byddai’r soced wedi’i lapio gan diwnel. Y neges check_hostname yw’r hyn y mae’r stac hwnnw’n ei allyrru pan fydd yn cyrraedd dilysu heb enw i gymharu ag ef. Mae uwchradd yn dileu’r diffyg oherwydd mae’r cleient mwy newydd yn cadw’r enw drwy’r cydlawenhau, ac mae’r newid yn ddigon rhad i’w roi ar brawf yn gyntaf pryd bynnag y bydd y fframiau cau’n pwyntio at god TLS sydd wedi’i blygu.

Os na ellir cyrraedd y mynegai o’r peiriant sy’n methu, cewch wheel cyfredol ar westeiwr a all wneud hynny a’i osod o’r ffeil. Defnyddiwch yr enw ffeil a lawrlwythwyd gennych mewn gwirionedd yn hytrach na fersiwn a gopïwyd o bost blog.

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

Pan fo’r procsi’n ailosod llofnod y traffig

Mae procsi sy’n terfynu TLS ac yn ailddyroddi tystysgrifau o dan wraidd corfforaethol yn cynhyrchu gwall gwahanol: certificate verify failed, nid cwyn enw gwesteiwr. Y gwahaniaeth hwnnw yw’r cliw, oherwydd cyrhaeddodd y cleient weinydd ac yna gwrthod yr hunaniaeth a ddangoswyd iddo. Y trwsio yw ymddiried yn y gwraidd hwnnw’n benodol, naill ai ar gyfer un gorchymyn neu drwy’r newidyn PIP_CERT, fel y gall y cleient adeiladu cadwyn i’r hyn y mae’r procsi’n ei gyflwyno. Mae ychwanegu’r gwraidd at storfa ymddiried y system yn gweithio hefyd, ond mae’n newid ymddiried ar gyfer pob rhaglen ar y peiriant, sy’n benderfyniad mwy na thrwsio un gosodiad pecyn.

Cadwch --trusted-host fel diagnostig, byth fel cyflwr sefydlog. Mae’n diffodd y gwiriad yr oeddech yn ceisio’i gadw, felly mae tystysgrif wirioneddol anghywir yn edrych yn iach wedyn. Os gwnaethoch ei ddefnyddio i osod un pecyn, tynnwch ef a thrwsiwch y gadwyn cyn y rhyddhau nesaf.

Mae eich cod Python eich hun yn anwybyddu ffurfweddiad pip yn ggyfan gwbl. Mae angen i alwad requests gael y procsi a’r bwndel wedi’u trosglwyddo lle mae’r sesiwn honno’n eu gweld, a dyna pam mae’r bloc isod yn gosod y ddau ar y gwrthrych sesiwn.

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)

Pan fo’r pen neu’r porth yn anghywir

Mae cleient tiwnel yn aml yn ailysgrifennu procsi’r system wrth gysylltu, a allai adael pip yn pwyntio at westeiwr nad yw byth yn ateb ar y porth hwnnw. Profwch y pen gyda chleient nad yw’n pip cyn newid unrhyw osodiad pip. Os bydd curl yn methu gyda’r un dadl procsi, mae’r diffyg uwchlaw pip ac ni fydd unrhyw faint o ffurfweddiad y tu mewn i pip yn helpu.

Mae baner y gorchymyn a’r newidynnau amgylchedd yn dweud yr un peth i gyrhaeddiadau gwahanol: mae’r faner yn berthnasol i un alwad, y newidynnau i bob proses a gychwynnwyd wedyn. Ychwanegwch NO_PROXY ar gyfer mynegai mewnol fel bod traffig pecynnau preifat yn hepgor y cylchdaith drwy’r tiwnel.

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

Cadwch y gosodiad a phrofwch fod y llwybr yn gweithio

Storiwch y procsi yn ffurfweddiad pip ei hun pan ddylai oroesi’r plisgyn cyfredol, yna darllenwch yn ôl beth fydd pip yn ei ddefnyddio mewn gwirionedd. Mae allbwn debug yn enwi’r ffeil a’r newidyn y tu ôl i bob gwerth, sy’n setlo dadleuon am flaenoriaeth yn gyflymach na darllen y ddogfennaeth.

Mae dilysu’n defnyddio dau gleient yn fwriadol. Mae’r cais o’r llyfrgell safonol yn profi’r llwybr a’r gadwyn ymddiried, tra mae’r lawrlwythiad yn profi bod ffurfweddiad pip ei hun yn cytuno â nhw. Pan fydd yr un cyntaf yn llwyddo a’r ail yn methu, mae’r gwahaniaeth y tu mewn i pip yn hytrach nag yn y rhwydwaith.

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

Erthyglau cysylltiedig