debian下使用Sphinx异常“Could not import extension sphinx.builders.linkcheck (exception: cannot import nam...

本文记录了在使用Sphinx编译文档时遇到的一个异常问题,即无法导入sphinx.builders.linkcheck扩展,并给出了详细的错误排查过程及解决方案。

最近使用到Sphinx编译文档,出现如下异常:

Extension error:
Could not import extension sphinx.builders.linkcheck (exception: cannot import name SSLError)

一开始有点摸不着头脑,明明是不能导入“sphinx.builders.linkcheck”,错误信息却是“cannot import name SSLError”

于是使用“-P”参数在异常时打开pdb调试,pdb打印信息如下:

Exception occurred while building, starting debugger:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/Sphinx-1.5b1-py2.7.egg/sphinx/cmdline.py", line 295, in main
opts.warningiserror, opts.tags, opts.verbosity, opts.jobs)
File "/usr/local/lib/python2.7/dist-packages/Sphinx-1.5b1-py2.7.egg/sphinx/application.py", line 189, in __init__
self.setup_extension(extension)
File "/usr/local/lib/python2.7/dist-packages/Sphinx-1.5b1-py2.7.egg/sphinx/application.py", line 514, in setup_extension
err)
ExtensionError: Could not import extension sphinx.builders.linkcheck (exception: cannot import name SSLError)

可以看到出错的地方在“application.py”,于是打开该文件一探究竟,源码如下:

进一步在pdb打印“extension”和“err”

现在可以知道,是在import的时候遇到了importerror,但是不知道具体是哪里错了,干脆另起python命令行,直接import这个扩展“sphinx.builders.linkcheck”,结果出现如下错误:

可以看到错误原因是不能从“requests.packages.urllib3.exceptions”导入“SSLError”,经验证发现,可以在“requests.exceptions”里面导入“SSLError”

而网上搜索,大多也只是提到从“requests.exceptions”导入“SSLError”。由于Sphinx是刚下载的最新版,我怀疑可能是版本不兼容的问题。

查看requests版本发现requests确实不是最新版本(官网目前最新版本为:v2.12.1):

进一步上官网确认,发现官网上有关SSLError的代码确实已经发生变化:

到此,完全确认是requests版本更新过程中改变了“SSLError”的位置(导入方式),升级requests到最新版后问题解决。

转载于:https://www.cnblogs.com/albert-yue/p/6114353.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值