我在项目根目录下的子文件夹(" docs")中创建了一个sphinx项目。当我运行make文件autodoc时,它无法找到配置文件并引发错误。
有没有办法解决这个问题?
这是错误:
/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'
谢谢, 乔瓦尼
答案 0 :(得分:0)
我要你的文件夹结构图看起来很乱。
嗯,从我所看到的,有两个可能的原因。
您没有将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
在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)
但是,从您发布的例外情况来看,此错误的可能性很小。
总的来说,我认为错误很可能是由于第一个原因造成的。