sphinxは、ルートドキュメントの下のディレクトリにないドキュメントにリンクできますか?


90

私は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

次のproject_spec.rstように、マスタードキュメントのtoctreeにファイルを含めようとしました。

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

   Module 1 <../../modules/module1/docs/module1>

ただし、次のエラーメッセージが表示されます。

警告:toctreeには、存在しないドキュメントu'modules / module1 / docs / module1 'への参照が含まれています

../どういうわけかドキュメントパスで使用することはできませんか?

更新:conf.pyの場所を追加しました

更新:以下のインクルードトリックを除いて、これはまだ(2019)不可能です。前進し続ける未解決の問題がありますhttps//github.com/sphinx-doc/sphinx/issues/701


.rst行に拡張子を追加する必要がありModule 1 <../../modules/module1/docs/module1>ますか?
クリス

Sphinxドキュメントでは:reSTソースファイルの拡張子が異なる可能性があり(.txtのような人もいれば、.rstのような人もいます。拡張子はsource_suffixで構成できます)、OSが異なればパスセパレータも異なるため、そうは思いません。Sphinxそれらを抽象化します。すべての「ドキュメント名」はソースディレクトリに相対的であり、拡張子は削除され、パス区切り文字はスラッシュに変換されます。
mc_electron 2012

OK、推測です!したがって、これsource_suffixは構成ファイル.rstでにconf.py設定されていると思います。また、すべてのパスがこのファイルに関連しているように見えるので、このファイルはディレクトリ階層のどこにありますか?
クリス

はい、source_suffixに設定されて.rstおり、conf.pyproject_spec.rstファイルと同じフォルダにあります。
mc_electron 2012

回答:


108

はい、できます!

シンボリックリンク(Windowsでは機能しません)の代わりに、.. include::ディレクティブ以外は何も含まないスタブドキュメントを作成します。

ソースツリーの一番上にあるREADMEファイルにリンクしようとしてこれに遭遇しました。私は以下をというファイルに入れましたreadme_link.rst

.. include:: ../README

次に、index.rstで、toctreeを次のように表示しました。

Contents:

.. toctree::
   :maxdepth: 2

   readme_link
   other_stuff

そして今、インデックスページにリリースノートへのリンクがあります。

提案をしてくれたhttp://reinout.vanrees.org/weblog/2010/12/08/include-external-in-sphinx.htmlに感謝します


5
READMEに、index.rstディレクトリ内で無効な相対パスを持つ画像などが含まれている場合、どのように処理しますか?「画像ファイルが読み取れません」というエラーが表示されます。
ルーカスW

はい、Unixでもシンボリックリンクを使用してこれを行うことができます。docscurrent-dir( '。')にリンクするdocs-folder(ie )と同じ名前のリンクを作成できます。次に、:download:docs\foo.rstを使用できます。これは、docsフォルダー内のファイルまたはその親に対して機能します。
ankostis 2014

1
私はちょうどここに戻ってこの答えを受け入れました、ありがとう!画像についてはよくわかりませんが、conf.pyでいつでもコピーできます。
mc_electron 2015年

11
.. include:: ../readme.rst拡張機能を含めて使用する必要がありました。
nuエベレスト2016年

1
:README.rstの一部のみ含めるにはmuffinresearch.co.uk/...
ederag

14

答えはノーのようです。toc-treeにリストされているドキュメントは、ソースディレクトリ、つまり、マスタードキュメントconf.py(およびサブディレクトリ)を含むディレクトリ内に存在する必要があります。

sphinx-devメーリングリストから:

STScIでは、Sphinxで個々のプロジェクトのドキュメントを作成し、(toctreeを使用して)これらの他のプロジェクト固有のドキュメントを多数含む「マスタードキュメント」も作成します。これを行うには、マスタードキュメントのドキュメントソースディレクトリにプロジェクトのドキュメントソースディレクトリへのシンボリックリンクを作成します。これは、toctreeがドキュメントソースツリーの外部にファイルを含めたくないように見えるためです。

したがって、を使用してファイルをコピーするのではなくshutilProject/docs/specディレクトリ内のすべてのモジュールにシンボリックリンクを追加してみてください。シンボリックリンクを作成する場合Project/modulesは、tocツリー内のこれらのファイルを単にmodules/module1/docs/module1etcとして参照します。


3
それは残念です。WordドキュメントからSphinxに切り替えようとすることで私が目にする利点の1つは、再利用可能なハードウェアモジュールをプロジェクトにインポートし、そのドキュメントをデザインのマスタードキュメントに含めることができることです。私はシンボリックリンクを使用しますが、残念ながら私はWindowsを使用しています。
mc_electron 2012

後世のためsys.pathに、conf.pyのにサブモジュールのdocフォルダーを追加しようとしましたが、うまくいきませんでした。
mc_electron 2012

1
@mc_electron Windowsのシンボリックリンクの場合は、mklinkコマンドを使用します。
ジェレミー

11

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'))

次に、同じディレクトリ内の最初のファイルを参照して、通常どおりindex.rstを使用します。したがって、ローカルのSphinxフォルダーのindex.rstにあります。

Contents:

.. toctree::
   :maxdepth: 4

   Package1 <package1.rst>
   Package2 <package2.rst>
   Package3 <package3.rst>

次に、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:

これは新しい動作ですか?どのバージョンで追加されましたか?
mc_electron

2
初心者に知らせるためにさらに説明されれば素晴らしいでしょう。たとえば、何Package1ですか?それは最初にpathを使用して指定されていsys.path.insertますか?または、どこかにチュートリアルはありますか?関連するドキュメントが見つからないようです。
マナバランガジャパシー2018年

Package1TOCがセクションのタイトルとして「Package1」を表示するように、は名前付きエントリです。
pabloC 2018

2
これにより、Pythonモジュールを別のディレクトリにautodocすることができますが、RSTファイルを別のディレクトリに含めることはできません。
mc_electron

1

ルートにindex.rstファイルのみを含み、Project / docsに他のすべてのsphinxのものを含むようにsphinxを構成することもできます。

Windowsの場合、すべてのsphinxファイルとdir(index.rstを除く)をdocs /に移動し、以下を変更しました。

docs/make.bat: 変化する

set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS%  .

set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS%  -c . ..

docs/conf.py: 追加

sys.path.insert(0, os.path.abspath('..'))

ありがとう!同じドキュメントから参照されている複数の関連パッケージが1つのリポジトリにある場合、この構成は私にとってはうまく機能します。
グレゴールMüllegger

1

外部のjupyterノートブックを含めたいという違いで、非常によく似た問題を解決しました。nbsphinxをインストールしましたが、動作させることができませんでした。 うまくいかなかったもの:

  1. パスにルートを含めたいディレクトリがありました。

    conf.py:

    import os import sys sys.path.insert(...

  2. .. include:: directiveファイルの使用はドキュメントに含まれていましたが、そのままです。

最後に問題を解決したのはパッケージnbsphinx-linkのインストールでした


0

バックアップする相対リンクを使用することが本当に不可能な場合の1つの解決策は、ファイルを仕様の仕様フォルダーツリーにコピーする../ために使用できshutilますが、conf.pyどうしても必要な場合を除いて、複数のコピーを作成したくないということです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.