构建sphinx文档时导入模块失败

Hak*_*kim 3 python python-sphinx

我正在使用Sphinx版本1.4.5.

我的项目结构如下:

+ src > main.py + docs (generated with sphinx-quickstart)

src即使在添加文件夹路径后docs/conf.py

sys.path.insert(0, os.path.abspath('../src'))
Run Code Online (Sandbox Code Playgroud)

并使用以下命令生成src/main.py(即docs/src.rstdocs/modules.rst)的第一个文件:

$ sphinx-apidoc -fo docs src
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下内容构建html网页时:

$ make clean
$ make html
Run Code Online (Sandbox Code Playgroud)

它找不到模块srcsrc/main.py

WARNING: autodoc: failed to import module u'src.main'; the following exception was raised

小智 6

我喜欢使用以下代码来conf.py准确了解当前目录是什么以及目标模块在哪里(以获取文档):

\n\n
current_dir = os.path.dirname(__file__)\ntarget_dir = os.path.abspath(os.path.join(current_dir, "../../src"))\nsys.path.insert(0, target_dir)\n\nprint(target_dir)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在本例中,我希望为我的 src 创建文档,请参阅树以了解上下文:

\n\n
main\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docs\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 make.bat\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Makefile\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 source\n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 conf.py\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.rst\n\xe2\x94\x82 \n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 target_module\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 requirements.txt\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 setup.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

接下来,从您的终端:

\n\n
[user@localhost docs]$ sphinx-apidoc -f -o source/ ../src/target_module\n[user@localhost docs]$ make html\n
Run Code Online (Sandbox Code Playgroud)\n


Pla*_*sma 5

尝试为您的路径插入执行此操作:

sys.path.insert(0, os.path.abspath('../'))
Run Code Online (Sandbox Code Playgroud)

还要为您的目录考虑一个比src.

  • 如果“conf.py”位于“docs”内,请参阅我的更新,了解您应该尝试的内容。关于目录命名,通常的做法是将源目录命名为与项目相同的名称 - 因此,如果您的项目名为 Foobar,则使用目录“foobar”而不是“src”。 (3认同)