sphinx链接到不在根文档下面的目录中的文档吗?

mc_*_*ron 78 python python-sphinx

我正在使用Sphinx来记录非Python项目.我想./doc在每个子模块中分发文件夹,其中包含submodule_name.rst用于记录该模块的文件.然后我想将这些文件吸入主层次结构中,为整个设计创建一个规范.

即:

Project
  docs
    spec
      project_spec.rst
      conf.py
  modules
    module1
      docs
        module1.rst
      src
    module2
      docs
        module2.rst
      src
Run Code Online (Sandbox Code Playgroud)

我试图将文件包含在主project_spec.rst文档toctree中,如下所示:

.. toctree::
   :numbered:
   :maxdepth: 2

   Module 1 <../../modules/module1/docs/module1>
Run Code Online (Sandbox Code Playgroud)

但是,此错误消息导致:

警告:toctree包含对不存在的文档u'modules/module1/docs/module1'的引用

是不是可以以../某种方式在文档路径中使用?

更新:添加conf.py位置

Dan*_*nes 93

是的你可以!

代替符号链接(在Windows上不起作用),创建一个除了.. include::指令之外什么都没有的存根文档.

我遇到了这个尝试链接到源树顶部的README文件.我将以下内容放在一个名为的文件中readme_link.rst:

.. include:: ../README
Run Code Online (Sandbox Code Playgroud)

然后index.rst,我让toctree看起来像:

Contents:

.. toctree::
   :maxdepth: 2

   readme_link
   other_stuff
Run Code Online (Sandbox Code Playgroud)

现在我在索引页面上有一个指向我的发行说明的链接.

感谢http://reinout.vanrees.org/weblog/2010/12/08/include-external-in-sphinx.html的建议

  • 我需要使用包含扩展名的`.. include :: ../ readme.rst`. (8认同)
  • README有图像或类似的,它们的相对路径在目录index.rst中是无效的,你如何处理它?我得到'图像文件不可读'错误. (4认同)
  • 我得到了“没有标题”,如 /sf/ask/985575881/ 中所述;所以我不得不在 include 指令上方添加一个标题(并从指向的 README.rst 中删除相同的标题,以避免冗余) (3认同)
  • 我刚刚回到这里并接受了这个答案,谢谢!不确定图像,但您始终可以将它们复制到 conf.py 中。 (2认同)
  • 仅包含 README.rst 的一部分:https://muffinresearch.co.uk/selectively-include-parts-readme-rst-in-your-docs/ (2认同)

Chr*_*ris 14

似乎答案是否定的,toc-tree中列出的文档必须位于源目录中,即包含主文档conf.py(以及任何子目录)的目录.

来自sphinx-dev邮件列表:

在STScI,我们为Sphinx中的单个项目编写文档,然后还生成一个"主文档",其中包括(使用toctree)许多其他项目特定文档.为此,我们在主文档的doc源目录中创建符号链接到项目的doc源目录,因为toctree似乎不想包含doc源树之外的文件.

因此,不是使用shutil您复制文件,而是尝试将符号链接添加到Project/docs/spec目录中的所有模块.如果你创建了一个符号链接,Project/modules你就可以在你的toc-tree中引用这些文件modules/module1/docs/module1.

  • 这太糟糕了.我在尝试从Word文档切换到Sphinx时看到的一个优点是,您可以将可重用的硬件模块导入到项目中,并将其文档包含在设计的主文档中.我会使用符号链接但是我在Windows上. (2认同)

A K*_*ote 9

在conf.py中,使用sys.path和os.path添加系统的相对路径

例如:

import os
import sys

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

然后像往常一样使用index.rst,引用同一目录中的第一个文件.所以在我的本地Sphinx文件夹中的index.rst中:

Contents:

.. toctree::
   :maxdepth: 4

   Package1 <package1.rst>
   Package2 <package2.rst>
   Package3 <package3.rst>
Run Code Online (Sandbox Code Playgroud)

然后在package1.rst中,您应该能够正常引用相关包.

Package1 package
=====================

Submodules
----------

Submodule1 module
----------------------------------

.. automodule:: file_within_directory_1
    :members:
    :undoc-members:
    :show-inheritance:

Submodule1 module
----------------------------------

.. automodule:: file_within_directory_2
    :members:
    :undoc-members:
    :show-inheritance:
Run Code Online (Sandbox Code Playgroud)

  • 这允许您在另一个目录中自动编写 Python 模块,但不允许您在另一个目录中包含 RST 文件。 (6认同)
  • 如果进一步描述以告知初学者,那就太好了。例如,什么是“Package1”?是使用 `sys.path.insert` 指定的第一个 `path` 吗?或者,哪里有教程?我似乎找不到相关的文档。 (2认同)