python encode import_完美解决Mac平台下Python3环境import bencode模块的报错

在Mac平台下(其它平台没测),即使你使用pip3 install bencode来安装bencode模块,安装后的bencode模块仍然不兼容python3(mac平台)。

因此,本文将对bencode模块稍作改动,使其可以在Mac平台下的python3环境中完美运行。

报错1: ModuleNotFoundError: No module named 'BTL'

通过pip3 install bencode之后,在py文件内通过import bencode时,会发生以下错误:

>>> import bencode

Traceback (most recent call last):

File "", line 1, in

File "/usr/local/lib/python3.7/site-packages/bencode/__init__.py", line 13, in

from BTL import BTFailure

ModuleNotFoundError: No module named 'BTL'

报错1:错误分析

通过上述错误信息,我们可以找到bencode模块的路径:/usr/local/lib/python3.7/site-packages/bencode/__init__.py,打开/usr/local/lib/python3.7/site-packages/bencode/目录,发现结构如下:

image.png

这么大的BTL.py,我都看到了,你找不到?你怕是个zz。

吐槽完毕,开始寻找背后原因,百度无果,谷歌无果,stackoverflow无果......(此处浪费半个小时)

还是靠自己吧。

为了解决这个奇怪的问题,我又找了其它库中使用了from xxx import xxx的py文件。

在bs4库中,找到结果如下:

image.png

咦?为什么有些库前面加了个.?难道是这个原因?

没错!确实是这个原因!!!

报错1:解决方案:

1、打开bencode模块文件(/usr/local/lib/python3.7/site-packages/bencode/__init__.py)。

2、将from BTL import BTFailure替换为from .BTL import BTFailure。

3、完成!

报错2:ImportError: cannot import name 'StringType' from 'types'

再次import bencode,看看会发生什么?

上一个问题确实被我们完美解决了,但是又出现了一个新问题。(修复1Bug,新增999+Bug)

错误信息如下:

>>> import bencode

Traceback (most recent call last):

File "", line 1, in

File "/usr/local/lib/python3.7/site-packages/bencode/__init__.py", line 74, in

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)

翻译为人话,大概就是说,types里没有StringType这个东西。

因此,我们需要自己定义StringType、IntType,LongType....等。

报错2:解决方案

1、注释掉/usr/local/lib/python3.7/site-packages/bencode/__init__.py中from types import StringType, IntType, LongType, DictType, ListType, TupleType语句。

2、新增如下语句:

StringType = type("")

IntType = type(0)

LongType = IntType #Python3内整型无大小之分,因此可以当作long来使用

DictType = type({})

ListType = type([])

TupleType = type(())

3、完成!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值