从sphinx子文件夹导入配置

时间:2016-06-03 07:06:08

标签: python python-sphinx

我在项目根目录下的子文件夹(" docs")中创建了一个sphinx项目。当我运行make文件autodoc时,它无法找到配置文件并引发错误。

有没有办法解决这个问题?

project structure

conf.py

Makefile

myreplicator.py

myreplicator.rst

这是错误:

/vagrant/python/mymongo/doc/myreplicator.rst:4: WARNING: autodoc: failed to import module 'myreplicator'; the following exception was raised:
Traceback (most recent call last):
  File "/var/venv/mymongo/lib/python3.5/site-packages/sphinx    /ext/autodoc.py", line 518, in import_object
    __import__(self.modname)
  File "/vagrant/python/mymongo/myreplicator.py", line 20, in <module>
logging.config.fileConfig('conf/logging.conf')
  File "/opt/py35/lib/python3.5/logging/config.py", line 76, in fileConfig
    formatters = _create_formatters(cp)
  File "/opt/py35/lib/python3.5/logging/config.py", line 109, in _create_formatters
    flist = cp["formatters"]["keys"]
  File "/opt/py35/lib/python3.5/configparser.py", line 956, in __getitem__
    raise KeyError(key)
KeyError: 'formatters'

谢谢, 乔瓦尼

1 个答案:

答案 0 :(得分:0)

我要你的文件夹结构图看起来很乱。

嗯,从我所看到的,有两个可能的原因。

1。系统路径

您没有将myreplicator.py目录放入sys.path,以致sphinx.autodoc.py无法找到您的模块(因为它只会搜索系统路径中的模块。因此您需要先将项目文件夹插入sys.path。可以通过在conf.py

中加入以下内容来完成
import os
import sys
sys.path.insert(0, os.path.abspath('../')) # based on what I see in your structure, the myrepicator.py is in the parent directory of conf.py

2。第三方Pacakge

myreplicator.py内部,有些第三方模块无法加载,很可能是某些C类型的库(如.pyd)。在这种情况下,您可以使用以下代码

模拟无法导入的第三方模块
from mock import MagicMock, Mock  # if you are using python2
# from unittest.mock import MagicMock, Mock # if you are using python3

class Mock(MagicMock):
    @classmethod
    def __getattr__(cls, name):
            return Mock()

MOCK_MODULES = ['mymongolib ', 'numpy', 'pandas'] # packages you want to mock
sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES)

但是,从您发布的例外情况来看,此错误的可能性很小。

总的来说,我认为错误很可能是由于第一个原因造成的。