发现问题

  今天在github上fork了CI 3.x的中文手册,按照README文档一步步进行Sphinx和相关工具的安装,最终build生成html版手册。操作到第6步执行`make html`的时候,抛出Python异常:

#这里省略了上面的输出信息
Exception occurred:
File "/Library/Python/2.7/site-packages/Sphinx-1.5-py2.7.egg/sphinx/environment/managers/toctree.py", line 273, in _entries_from_toctree
title = clean_astext(self.titles[ref])
AttributeError: 'Toctree' object has no attribute 'titles'
The full traceback has been saved in /var/folders/2x/b7_jzxyd1dj5cq7q41yr18s00000gn/T/sphinx-err-BF9qkA.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
A bug report can be filed in the tracker at <https://github.com/sphinx-doc/sphinx/issues>. Thanks!
make: *** [html] Error 1

  显然问题出在sphinx库。必须要找到解决方案才能完成第6步。

解决方案

  通过提示信息访问它的github issue页面,用第四行的错误信息(AttributeError: 'Toctree' object has no attribute 'titles')作为关键词搜索,搜到了一条反映这个问题的issue。这个问题在6天前被提出,并且在4天前被close,说明问题已经解决。

  在评论列表中找到开发者的回复,根据他给的链接找到fix bug的commit,查看所做的修改,发现是将toctree.py文件第273行的

title = clean_astext(self.titles[ref])

这句改为

title = clean_astext(self.env.titles[ref])

这个修改刚好对应到产生异常信息的那句代码。于是根据异常信息找到toctree.py文件,将那行修改。

  最后再次执行`make html`,执行成功。

总结反思

  这次找解决方案的过程其实饶了很多弯路。做得比较差劲的地方有:

  • 没有注意到issue的状态。出现了异常以后,根据异常信息很快就找到了关于这个bug的issue页面。评论列表中开发者回复说会在周末发布一个新的release,由于没有留意issue已经被close了,所以最开始并不知道已经有新的提交修复了bug。
  • 没有注意到异常信息第二行已经给出了产生异常的文件,用搜索引擎和find命令找了好久。后来想到用easy_install命令重新安装Sphinx可能会将安装路径输出到终端,用这个方法果真找到了库的目录。(写这篇随笔的时候才发现错误信息里面已经告诉我文件的位置了。。。)

  当然也有值得自我夸奖的地方:

  • 看到开发者修复bug的提交后立即想到,在release出来以前我可以自己动手修复这个bug。因为Python是一门解释执行的语言,因此库代码一定是以源码的形式保存在某个目录下。
  • 解决了问题就值得夸奖

mac系统下修复第三方Python包bug的更多相关文章

  1. mac系统下Eclipse + pydev配置python Interpreter

    mac系统下Eclipse + pydev配置python Interpreter   之前都在windows下使用Eclipse + pydev 进行开发,未发现什么异常,最近对wxpy.itcha ...

  2. Mac系统下React Native环境搭建

    这里记录一下在Mac系统下搭建React Native开发环境的过程: 1. 安装HomeBrew: /usr/bin/ruby -e "$(curl -fsSL https://raw.g ...

  3. 用anaconda的pip安装第三方python包的日志

    用anaconda的pip安装第三方python包的日志 启动anaconda命令窗口: 开始> 所有程序> anaconda> anaconda prompt 会得到两行提示: D ...

  4. (转载)Mac系统下利用ADB命令连接android手机并进行文件操作

    Mac系统下利用ADB命令连接android手机并进行文件操作 标签: Mac adb android 2016-03-14 10:09 5470人阅读 评论(1) 收藏 举报  分类: Androi ...

  5. mac系统下虚拟机parallels安装ubuntu 14.04

    mac系统很棒,mac下的开发环境也很棒,但有时你还得需要ubuntu开发环境,比如进行嵌入式Linux交叉编译,使用Linaro toolchain… 其实mac系统下使用parallels虚拟机安 ...

  6. MAC系统下,删除.svn文件

    MAC系统下,.svn文件是隐藏的. 如果项目是非export导出的,那么项目中会有很多的.svn文件. 如果项目的体积非常庞大,我们如何快速的批量删除.svn文件呢?下面是操作方法: 打开终端,cd ...

  7. Mac系统下使用VirtualBox虚拟机安装win7--第一步 安装vbox虚拟机

    Mac系统下使用VirtualBox虚拟机安装win7操作步骤: 第一步 安装vbox虚拟机 1.先下载vbox,下载地址:: https://www.virtualbox.org/wiki/Down ...

  8. 曲线救国,解决Mac系统下,Android sdk下载失败的问题

    Mac下翻_墙的问题 话说GFW屏蔽谷歌已经有一阵子了,最近打算在Mac系统下折腾个Android应用,备好了IDE,只欠SDK,无奈下载时因为GFW的缘故,总是失败,我心痛哉! 由于本人偏爱Mac系 ...

  9. Linux 系统下用源码包安装软件

    Linux系统下用源码包安装软件 by:授客 QQ:1033553122 下载源码安装包,解压或者直接双击打开(如果有安装zip或rar等压缩/解压缩软件的话),查找相关的安装说明文件,一般是READ ...

随机推荐

  1. 【PAT】B1039 到底买不买(20)(20 分)

    /* 琢磨了很久,当时还没做几道题,参考了柳婼的思路 */ #include<stdio.h> #include<string.h> char arr[1000]={'\0'} ...

  2. 【PAT】B1042 字符统计(20 分)

    /* 15分的题很简单,但是自己写的时候在输入数据时没有考虑好下标 另外有忘记了输入字符时考虑是否有\n */ #include<stdio.h> #include<algorith ...

  3. 布局:高度已知,布局一个三栏布局,左栏和右栏宽度为200px,中间自适应

    需求:高度已知为200px,写出三栏布局,左栏和右栏各位200px,中间自适应,如下图所示: 方法一:float浮动布局 原理是:定义三个区块,需要注意的是中间的区块放在右边区块的下面,统一设置高度为 ...

  4. File类_常见的方法(获取目录内容)

    获取当前目录下的文件以及文件夹,包含隐藏文件 调用list方法的File对象中封装的必须是目录否则会发生空指针异常,如果封装的是系统级的目录也会发生空指针异常(因为数组根本就没有创建成功) 如果目录存 ...

  5. Python3中PyMongo的用法

    MongoDB存储 在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库. 连接Mon ...

  6. cryptopunks测试代码cryptopunksmarket-setinitial.js

    require('babel-polyfill'); //测试用例要在执行完了truffle compile和truffle migrate后才能使用truffle test来进行测试 //要注意ar ...

  7. php使用MPDF导出PDF文件自定义字体

    最近公司要生成一个PDF文件,网上找了很多类库,使用mpdf最方便,通过HTML输入调整样式,官方地址:http://www.mpdf1.com/,更改字体这个问题困扰了我很久,网上找的方法都不适用, ...

  8. QT pro文件详细写法+实例

    很多的初学者都没有注意pro 文件的内容 今天简单的介绍一下 这个文件主要内容 TEMPLATE:这个变量是用来定义你的工程将被编译成什么模式.如果没有这个设置,系统将默认编译为application ...

  9. node通过http.request向其他服务器上传文件

    function upload(callback) { let boundaryKey = '----' + new Date().getTime(); // 用于标识请求数据段 let option ...

  10. Zephyr的Threads

    Threads介绍了一个线程的创建.调度以及删除过程.