రెండు వేర్వేరు వైఫల్యాలు ఒకే pip ట్రేస్బ్యాక్ను ముద్రిస్తాయి, ఒకదానికి సరిపోయే మరమ్మతు మరొకదాన్ని మరింత దెబ్బతీస్తుంది. సొరంగం ద్వారా వెళ్లే హోస్ట్ను పేర్కొనడానికి చాలా పాత క్లయింట్కు అప్గ్రేడ్ అవసరం. ట్రాఫిక్ను తిరిగి సంతకం చేసే ప్రాక్సీకి విశ్వసనీయ మూల ధృవపత్రం అవసరం, వెర్షన్ తగ్గింపు కాదు. ప్రాక్సీ వేరియబుల్ను సవరించే ముందు ఈ రెండింటిలో మీకు ఏది ఉందో నిర్ణయించండి, ఎందుకంటే మార్గాలు వ్యతిరేక దిశల్లో వెళ్తాయి.

సెట్టింగ్లను తాకే ముందు చివరి ఫ్రేమ్లను చదవండి

ట్రేస్బ్యాక్ ఎక్కడ ముగుస్తుందో ఏ పొర లొంగిపోయిందో చెబుతుంది. చివరి ఫ్రేమ్లు pipతో వచ్చే urllib3 TLS కోడ్ లోపల ఉండి, పాఠ్యం హోస్ట్నామ్ గురించి ఫిర్యాదు చేస్తే, క్లయింట్ లైబ్రరీ ధృవీకరణ దశను పూర్తి చేయలేకపోయింది, మరియు అది ధృవపత్ర సమస్య కంటే చాలా ఎక్కువసార్లు వెర్షన్ సమస్య. పాఠ్యం బదులుగా తిరస్కరించిన కనెక్షన్, పరిష్కరించని ప్రాక్సీ పేరు లేదా HTTP 407 లోపాన్ని నివేదిస్తే, సొరంగం చివరి బిందువే దోషి మరియు ఏ అప్గ్రేడ్ దానిని మార్చదు.

విఫలమయ్యే అదే షెల్లో pip వెర్షన్ మరియు ప్రాక్సీ వేరియబుల్లను నమోదు చేయండి. సొరంగం పైకి రాకముందు తెరిచిన షెల్ తర్వాత తెరిచిన దానికంటే వేరే విలువలను కలిగి ఉంటుంది, మరియు వాటి మధ్య వ్యత్యాసమే తరచుగా మొత్తం నిర్ధారణ.

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

క్లయింట్ సొరంగం కంటే పాతది అయినప్పుడు

పాత pip విడుదలలు సాకెట్ సొరంగంతో చుట్టబడిన తర్వాత గమ్యస్థాన హోస్ట్నామ్ను కోల్పోయే HTTPS స్టాక్ను కలిగి ఉండేవి. check_hostname సందేశం అనేది పోల్చడానికి పేరు లేకుండా ధృవీకరణకు చేరినప్పుడు ఆ స్టాక్ విడుదల చేసేది. అప్గ్రేడ్ లోపాన్ని తొలగిస్తుంది ఎందుకంటే కొత్త క్లయింట్ చేతులు కలపడం అంతటా పేరును ఉంచుతుంది, మరియు చివరి ఫ్రేమ్లు తోడు వచ్చే TLS కోడ్ను సూచించినప్పుడల్లా దీన్ని మొదట ప్రయత్నించదగిన చవకైన మార్పు.

విఫలమయ్యే మెషీన్ నుండి సూచికను చేరుకోలేకపోతే, చేరుకోగల హోస్ట్లో ప్రస్తుత wheelను పొంది ఫైల్ నుండి ఇన్స్టాల్ చేయండి. బ్లాగ్ పోస్ట్ నుండి కాపీ చేసిన వెర్షన్ కాకుండా మీరు నిజంగా డౌన్లోడ్ చేసిన ఫైల్ పేరును ఉపయోగించండి.

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

ప్రాక్సీ ట్రాఫిక్ను తిరిగి సంతకం చేసినప్పుడు

TLSను ముగించి, కార్పొరేట్ మూలం కింద ధృవపత్రాలను తిరిగి జారీ చేసే ప్రాక్సీ వేరే లోపాన్ని ఉత్పత్తి చేస్తుంది: certificate verify failed, హోస్ట్నామ్ ఫిర్యాదు కాదు. ఆ వ్యత్యాసమే ఆధారం, ఎందుకంటే క్లయింట్ సర్వర్ను చేరి తర్వాత తనకు చూపిన గుర్తింపును తిరస్కరించింది. మరమ్మతు అనేది ఆ మూలాన్ని స్పష్టంగా విశ్వసించడం, ఒక ఆదేశానికైనా లేదా PIP_CERT వేరియబుల్ ద్వారానైనా, తద్వారా ప్రాక్సీ ప్రదర్శించే దానికి క్లయింట్ గొలుసును నిర్మించగలదు. మూలాన్ని సిస్టమ్ విశ్వాస నిల్వకు జోడించడం కూడా పని చేస్తుంది, కానీ అది మెషీన్లోని ప్రతి ప్రోగ్రామ్ విశ్వాసాన్ని మారుస్తుంది, మరియు అది ఒక ప్యాకేజీ ఇన్స్టాలేషన్ను సరిచేయడం కంటే పెద్ద నిర్ణయం.

--trusted-hostను నిర్ధారణ సాధనంగా ఉంచండి, ఎప్పుడూ శాశ్వత స్థితిగా కాదు. మీరు నిలుపుకోవాలని ప్రయత్నించిన తనిఖీని అది ఆపివేస్తుంది, కాబట్టి నిజంగా తప్పు ధృవపత్రం తర్వాత ఆరోగ్యంగా కనిపిస్తుంది. ఒక ప్యాకేజీని ఇన్స్టాల్ చేయడానికి దాన్ని ఉపయోగించినట్లయితే, దాన్ని తొలగించి తదుపరి విడుదలకు ముందు గొలుసును సరిచేయండి.

మీ సొంత Python కోడ్ pip కాన్ఫిగరేషన్ను పూర్తిగా విస్మరిస్తుంది. requests కాల్కు ప్రాక్సీ మరియు బండిల్ ఆ సెషన్ వాటిని చూడగల స్థలానికి అందించాలి, అందుకే కింది బ్లాక్ రెండింటినీ సెషన్ ఆబ్జెక్ట్పై సెట్ చేస్తుంది.

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)

చివరి బిందువు లేదా పోర్టు తప్పు అయినప్పుడు

సొరంగం క్లయింట్ కనెక్ట్ అయ్యేటప్పుడు సిస్టమ్ ప్రాక్సీని తరచుగా తిరిగి రాస్తుంది, ఇది pipను ఆ పోర్టులో ఎప్పుడూ సమాధానం ఇవ్వని హోస్ట్ వైపు చూపిస్తూ ఉంచవచ్చు. ఏదైనా pip సెట్టింగ్ను మార్చే ముందు pip కాని క్లయింట్తో చివరి బిందువును పరీక్షించండి. అదే ప్రాక్సీ ఆర్గ్యుమెంట్తో curl విఫలమైతే, లోపం pip పైన ఉంది మరియు pip లోపలి ఏ కాన్ఫిగరేషన్ సహాయపడదు.

ఆదేశ ఫ్లాగ్ మరియు పర్యావరణ వేరియబుల్లు వేర్వేరు పరిధులకు ఒకే విషయం చెబుతాయి: ఫ్లాగ్ ఒక కాల్కు, వేరియబుల్లు తర్వాత ప్రారంభమయ్యే ప్రతి ప్రక్రియకు వర్తిస్తాయి. అంతర్గత సూచికకు NO_PROXY జోడించండి, ప్రైవేట్ ప్యాకేజీ ట్రాఫిక్ సొరంగం ద్వారా వెళ్లే మళ్లింపును దాటవేయనివ్వండి.

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

సెట్టింగ్ను శాశ్వతంగా ఉంచి మార్గం పని చేస్తుందని నిరూపించండి

ప్రస్తుత షెల్ కంటే ఎక్కువ కాలం ఉండాల్సి వచ్చినప్పుడు ప్రాక్సీని pip స్వంత కాన్ఫిగరేషన్లో నిల్వ చేయండి, తర్వాత pip నిజంగా ఏమి ఉపయోగిస్తుందో చదవండి. debug అవుట్పుట్ ప్రతి విలువ వెనుక ఉన్న ఫైల్ మరియు వేరియబుల్ను పేర్కొంటుంది, ఇది ప్రాధాన్యత గురించిన వాదనలను డాక్యుమెంటేషన్ చదవడం కంటే వేగంగా తీరుస్తుంది.

ధృవీకరణ ఉద్దేశపూర్వకంగా రెండు క్లయింట్లను ఉపయోగిస్తుంది. ప్రామాణిక లైబ్రరీ అభ్యర్థన మార్గాన్ని మరియు విశ్వాస గొలుసును నిరూపిస్తుంది, డౌన్లోడ్ pip స్వంత కాన్ఫిగరేషన్ వాటితో ఏకీభవిస్తుందని నిరూపిస్తుంది. మొదటిది విజయవంతమై రెండవది విఫలమైనప్పుడు, వ్యత్యాసం నెట్వర్క్లో కాదు pip లోపల ఉంది.

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

సంబంధిత వ్యాసాలు