Python2.6 pip search 報(bào)錯(cuò)需要將HTTP轉(zhuǎn)換為HTTPS的錯(cuò)誤解決

輸入命令行:pip search blade
報(bào)錯(cuò)信息如下:

<code python>
Exception:
Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/pip/basecommand.py", line 139, in main
status = self.run(options, args)
File "/usr/lib/python2.6/site-packages/pip/commands/search.py", line 38, in run
pypi_hits = self.search(query, index_url)
File "/usr/lib/python2.6/site-packages/pip/commands/search.py", line 53, in search
hits = pypi.search({'name': query, 'summary': query}, 'or')
File "/usr/lib64/python2.6/xmlrpclib.py", line 1199, in call
return self.__send(self.__name, args)
File "/usr/lib64/python2.6/xmlrpclib.py", line 1491, in __request
verbose=self.__verbose
File "/usr/lib64/python2.6/xmlrpclib.py", line 1243, in request
headers
ProtocolError: <ProtocolError for pypi.python.org/pypi: 403 Must access using HTTPS instead of HTTP>
</code>

Google上搜索了很多解決方案,例如替換某個(gè)文件中http為https(我的安裝目錄根本就沒有那個(gè)文件认境,如何替換)左权、安裝xx包(安裝了,然并軟)等等意乓,都沒有解決我的問題。
先說解決方法:
修改文件pip/commands/search.py

<code python>
50 def search(self, query, index_url):
51 #pypi = xmlrpclib.ServerProxy(index_url, pip.download.xmlrpclib_transport)
52 pypi = xmlrpclib.ServerProxy(index_url)
53 print ""10,index_url
54 hits = pypi.search({'name': query, 'summary': query}, 'or')
55 return hits
</code>

就是修改pypi的初始化方式,因?yàn)镾erverProxy類里面會(huì)根據(jù)傳入的URL自動(dòng)選擇是創(chuàng)建http實(shí)例還是HTTPS實(shí)例
下面是具體的邏輯解析届良,不感興趣的可以直接跳過了



終極大法笆凌,追蹤源碼,最后發(fā)現(xiàn)如下代碼士葫。

xmlrpclib.py文件中乞而,有一個(gè)ServerProxy類,init方法中慢显,有如下內(nèi)容:

<code python>
1457 def init(self, uri, transport=None, encoding=None, verbose=0,
1458 allow_none=0, use_datetime=0):
1459 # establish a "logical" server connection
1460
1461 # get the url
1462 import urllib
1463 type, uri = urllib.splittype(uri)
1464 if type not in ("http", "https"):
1465 raise IOError, "unsupported XML-RPC protocol"
1466 self.__host, self.__handler = urllib.splithost(uri)
1467 if not self.__handler:
1468 self.__handler = "/RPC2"
1469 print "transport:", transport
1470 if transport is None:
1471 if type == "https":
1472 transport = SafeTransport(use_datetime=use_datetime)
1473 else:
1474 transport = Transport(use_datetime=use_datetime)
1475 self.__transport = transport
1476 print "isinstance SafeTransport:",isinstance(self.__transport, SafeTransport)
1477 self.__encoding = encoding
1478 self.__verbose = verbose
1479 self.__allow_none = allow_none
</code>

在1471到1474行中爪模,創(chuàng)建了兩個(gè)transport,如果type為https荚藻,則創(chuàng)建SafeTransport(HTTPS的實(shí)例)屋灌,于是跟蹤傳進(jìn)來的uri,發(fā)現(xiàn)是HTTPS的頭应狱,但是共郭,并沒有創(chuàng)建SafeTransport實(shí)例,再次回頭跟蹤疾呻,發(fā)現(xiàn)傳進(jìn)來的參數(shù)transport并不是None落塑,于是再往回跟蹤,發(fā)現(xiàn)上方調(diào)用層罐韩,

pip/commands/search.py 代碼如下:

<code python>
50 def search(self, query, index_url):
51 pypi = xmlrpclib.ServerProxy(index_url, pip.download.xmlrpclib_transport)
53 print ""10,index_url
54 hits = pypi.search({'name': query, 'summary': query}, 'or')
55 return hits
</code>

如此可知憾赁,已經(jīng)被指定了,我們?cè)賮砜纯粗付ǖ氖莻€(gè)啥東東

pip/download.py

<code python>
24 all = ['xmlrpclib_transport', 'get_file_content', 'urlopen',
25 'is_url', 'url_to_path', 'path_to_url', 'path_to_url2',
26 'geturl', 'is_archive_file', 'unpack_vcs_link',
27 'unpack_file_url', 'is_vcs_url', 'is_file_url', 'unpack_http_url']
28
29
30 xmlrpclib_transport = xmlrpclib.Transport()
</code>

到此就明了了散吵,由于指定了Transport龙考,所以,不再重新創(chuàng)建transport矾睦,而Transport和SafeTransport的區(qū)別(源碼我就不貼了晦款,源碼在xmlrpclib.py文件的,主要就一個(gè)make_connection方法的實(shí)現(xiàn)枚冗。)缓溅,就是SafeTransport是Transport的子類,是HTTPS的實(shí)現(xiàn)赁温。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坛怪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子股囊,更是在濱河造成了極大的恐慌袜匿,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稚疹,死亡現(xiàn)場(chǎng)離奇詭異居灯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門怪嫌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來义锥,“玉大人,你說我怎么就攤上這事岩灭“璞叮” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵川背,是天一觀的道長贰拿。 經(jīng)常有香客問我蛤袒,道長熄云,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任妙真,我火速辦了婚禮缴允,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘珍德。我一直安慰自己练般,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布锈候。 她就那樣靜靜地躺著薄料,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泵琳。 梳的紋絲不亂的頭發(fā)上摄职,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音获列,去河邊找鬼谷市。 笑死,一個(gè)胖子當(dāng)著我的面吹牛击孩,可吹牛的內(nèi)容都是我干的迫悠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼巩梢,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼创泄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起括蝠,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤验烧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后又跛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碍拆,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了感混。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片端幼。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖弧满,靈堂內(nèi)的尸體忽然破棺而出婆跑,到底是詐尸還是另有隱情,我是刑警寧澤庭呜,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布滑进,位于F島的核電站,受9級(jí)特大地震影響募谎,放射性物質(zhì)發(fā)生泄漏扶关。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一数冬、第九天 我趴在偏房一處隱蔽的房頂上張望节槐。 院中可真熱鬧,春花似錦拐纱、人聲如沸铜异。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揍庄。三九已至,卻和暖如春东抹,著一層夾襖步出監(jiān)牢的瞬間蚂子,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工府阀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缆镣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓试浙,卻偏偏與公主長得像董瞻,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子田巴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容