在Mac平臺(tái)下(其它平臺(tái)沒(méi)測(cè))弃舒,即使你使用pip3 install bencode
來(lái)安裝bencode模塊助赞,安裝后的bencode模塊仍然不兼容python3(mac平臺(tái))泵三。
因此喘帚,本文將對(duì)bencode模塊稍作改動(dòng)矾踱,使其可以在Mac平臺(tái)下的python3環(huán)境中完美運(yùn)行户辱。
報(bào)錯(cuò)1: ModuleNotFoundError: No module named 'BTL'
通過(guò)pip3 install bencode
之后鸵钝,在py文件內(nèi)通過(guò)import bencode
時(shí),會(huì)發(fā)生以下錯(cuò)誤:
>>> import bencode
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.7/site-packages/bencode/__init__.py", line 13, in <module>
from BTL import BTFailure
ModuleNotFoundError: No module named 'BTL'
報(bào)錯(cuò)1:錯(cuò)誤分析
通過(guò)上述錯(cuò)誤信息庐镐,我們可以找到bencode模塊的路徑:/usr/local/lib/python3.7/site-packages/bencode/__init__.py
恩商,打開(kāi)/usr/local/lib/python3.7/site-packages/bencode/
目錄,發(fā)現(xiàn)結(jié)構(gòu)如下:
這么大的BTL.py必逆,我都看到了怠堪,你找不到韧献?你怕是個(gè)zz。
吐槽完畢研叫,開(kāi)始尋找背后原因锤窑,百度無(wú)果,谷歌無(wú)果嚷炉,stackoverflow無(wú)果......(此處浪費(fèi)半個(gè)小時(shí))
還是靠自己吧渊啰。
為了解決這個(gè)奇怪的問(wèn)題,我又找了其它庫(kù)中使用了from xxx import xxx
的py文件申屹。
在bs4庫(kù)中绘证,找到結(jié)果如下:
咦?為什么有些庫(kù)前面加了個(gè).
哗讥?難道是這個(gè)原因嚷那?
沒(méi)錯(cuò)!確實(shí)是這個(gè)原因8松贰N嚎怼!
報(bào)錯(cuò)1:解決方案:
1决乎、打開(kāi)bencode模塊文件(/usr/local/lib/python3.7/site-packages/bencode/__init__.py
)队询。
2、將from BTL import BTFailure
替換為from .BTL import BTFailure
构诚。
3蚌斩、完成!
報(bào)錯(cuò)2:ImportError: cannot import name 'StringType' from 'types'
再次import bencode
范嘱,看看會(huì)發(fā)生什么送膳?
上一個(gè)問(wèn)題確實(shí)被我們完美解決了,但是又出現(xiàn)了一個(gè)新問(wèn)題丑蛤。(修復(fù)1Bug叠聋,新增999+Bug)
錯(cuò)誤信息如下:
>>> import bencode
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.7/site-packages/bencode/__init__.py", line 74, in <module>
from types import StringType, IntType, LongType, DictType, ListType, TupleType
ImportError: cannot import name 'StringType' from 'types' (/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/types.py)
翻譯為人話,大概就是說(shuō)盏阶,types里沒(méi)有StringType這個(gè)東西晒奕。
因此,我們需要自己定義StringType名斟、IntType脑慧,LongType....等。
報(bào)錯(cuò)2:解決方案
1砰盐、注釋掉/usr/local/lib/python3.7/site-packages/bencode/__init__.py
中from types import StringType, IntType, LongType, DictType, ListType, TupleType
語(yǔ)句闷袒。
2、新增如下語(yǔ)句:
StringType = type("")
IntType = type(0)
LongType = IntType #Python3內(nèi)整型無(wú)大小之分岩梳,因此可以當(dāng)作long來(lái)使用
DictType = type({})
ListType = type([])
TupleType = type(())
3囊骤、完成晃择!