我正在使用Sphinx。执行命令make html
时,定义抽象类或从抽象类派生的文件会出错。
File "/usr/lib/python2.7/dist-packages/sphinx/ext/autodoc.py", line 529
in import_object
__import__(self.module)
File "/home/pi/.../abstractNode.py", line 6, in <module>
from abc import ABC, abstractclassmethod
ImportError: cannot import name ABC
最小例子:
档案:abstractNode.py
from abc import ABC, abstractclassmethod
class abstractNode(ABC):
'''
abstract parent
'''
@abstractmethod
def moduleNode(self, parameter=[]):
'''
Implement Node Functionality here
'''
pass
档案:Node.py
from foo.bar import abstractNode
class Node(abstractNode):
'''
implementation of abstract parent
'''
def moduleNode(self, parameter=[]):
'''
implementation written here
'''
pass
结果是那些抽象类依赖项的文档几乎为空,而不使用ABC的类则很好。
导入任何其他软件包没有任何问题。
答案 0 :(得分:0)
感谢pierre-de-buyl和mzjn。你确实发现了这个问题:
虽然ABC和抽象类在2.7 documentation中定义,并且存在于/usr/lib/python2.7中,但您必须强制sphinx使用python 3.x
不幸的是我没有找到一个优雅的方法来做到这一点,但我在下面描述的方法解决了这个问题:
使用python3安装sphinx:
sudo apt-get install python3-sphinx
或
sudo pip3 install sphinx
(与python-sphinx
或pip install
相比)
(也许有人有更好的想法强迫sphinx使用python 3.x?)