Sphinx Python ImportError:无法导入名称

时间:2017-09-14 15:50:59

标签: python python-sphinx

我正在使用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的类则很好。

导入任何其他软件包没有任何问题。

1 个答案:

答案 0 :(得分:0)

感谢pierre-de-buylmzjn。你确实发现了这个问题:

虽然ABC和抽象类在2.7 documentation中定义,并且存在于/usr/lib/python2.7中,但您必须强制sphinx使用python 3.x

不幸的是我没有找到一个优雅的方法来做到这一点,但我在下面描述的方法解决了这个问题:

  1. 卸载sphinx
  2. 使用python3安装sphinx:

    sudo apt-get install python3-sphinx
    

    sudo pip3 install sphinx
    

    (与python-sphinxpip install相比)

  3. 以您习惯的方式创建一个sphinx文档
  4. (也许有人有更好的想法强迫sphinx使用python 3.x?)