Sphinx, kök belgenin altındaki dizinlerde bulunmayan belgelere bağlanabilir mi?


91

Python dışı bir projeyi belgelemek için Sphinx kullanıyorum. ./docHer alt modülde, submodule_name.rstbu modülü belgelemek için dosyalar içeren klasörleri dağıtmak istiyorum . Daha sonra tüm tasarım için bir özellik oluşturmak için bu dosyaları ana hiyerarşiye çekmek istiyorum.

Yani:

Project
  docs
    spec
      project_spec.rst
      conf.py
  modules
    module1
      docs
        module1.rst
      src
    module2
      docs
        module2.rst
      src

Dosyaları ana project_spec.rstbelgeye şu şekilde dahil etmeye çalıştım:

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

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

Ancak bu hata mesajı:

UYARI: toctree, mevcut olmayan belgeye referans içerir u'modules / module1 / docs / module1 '

../Bir belge yolunda bir şekilde kullanmak mümkün değil mi?

Güncelleme: conf.py konumu eklendi

Güncelleme: Aşağıdaki dahil etme hilesi dışında, bu hala (2019) mümkün değil. İlerlemeye devam eden açık bir sorun var: https://github.com/sphinx-doc/sphinx/issues/701


.rstUzantıyı hatta eklemeniz gerekiyor Module 1 <../../modules/module1/docs/module1>mu?
Chris

Sanmıyorum çünkü Sphinx Docs'ta: reST kaynak dosyaları farklı uzantılara sahip olabileceğinden (bazıları .txt gibi, bazıları .rst gibi - uzantı source_suffix ile yapılandırılabilir) ve farklı işletim sistemlerinde farklı yol ayırıcılar, Sphinx onları özetler: tüm "belge adları" kaynak dizine göredir, uzantı çıkarılır ve yol ayırıcılar eğik çizgiye dönüştürülür.
mc_electron

Tamam, sadece bir tahmin! Sanırım Böylece source_suffixayarlandığında .rstsizin de conf.pyyapılandırma dosyası. Ayrıca, tüm yolların bu dosyaya göre olduğu görüldüğünden, bu dosya dizin hiyerarşinizde nerede?
Chris

Evet, source_suffixolarak ayarlanmış .rstve dosya ile conf.pyaynı klasörde project_spec.rst.
mc_electron

Yanıtlar:


109

Evet yapabilirsin!

Bir sembolik bağlantı (Windows'ta çalışmaz) yerine, bir .. include::yönergeden başka hiçbir şey içermeyen bir saplama belgesi oluşturun .

Kaynak ağacının tepesindeki bir README dosyasına bağlanmaya çalışırken bununla karşılaştım. Aşağıdakileri adlı bir dosyaya koydum readme_link.rst:

.. include:: ../README

Sonra index.rst, toctree'nin şöyle görünmesini sağladım:

Contents:

.. toctree::
   :maxdepth: 2

   readme_link
   other_stuff

Ve şimdi dizin sayfamda sürüm notlarıma bir bağlantı var.

Öneri için http://reinout.vanrees.org/weblog/2010/12/08/include-external-in-sphinx.html'ye teşekkürler


6
README, index.rst dizininde geçerli olmayan göreceli yollara sahip resimler veya benzerleri içeriyorsa, bunu nasıl idare edeceksiniz? 'Görüntü dosyası okunamıyor' hataları alıyorum.
Lucas W

Evet, bunu Unix'te sembolik bağlantılarla da yapabilirsiniz. docsCurrent-dir ('.') 'E bağlanan docs klasörü (yani ) ile aynı ada sahip bir bağlantı oluşturabilirsiniz . Sonra şunu kullanabilirsiniz: download: docs\foo.rstve bu, docsklasördeki veya onun üstündeki dosyalar için çalışır .
ankostis

1
Buraya yeni geldim ve bu cevabı kabul ettim, teşekkürler! Resimlerden emin değilsiniz, ancak bunları her zaman conf.py içinde kopyalayabilirsiniz.
mc_electron

11
.. include:: ../readme.rstUzantıyı dahil kullanmam gerekiyordu .
nu everest


14

Görünüşe göre cevap hayır, toc ağacında listelenen belgeler kaynak dizinde , yani ana belgenizi ve conf.py(ve herhangi bir alt dizini) içeren dizinde yer almalıdır .

Gönderen sfenks-dev posta listesine :

STScI'de, Sphinx'teki bireysel projeler için dokümantasyon yazıyoruz ve ardından bu diğer projeye özgü dokümanların bir kısmını içeren (toctree kullanarak) bir "ana doküman" üretiyoruz. Bunu yapmak için, ana belgenin doc kaynak dizininde projelerin belge kaynak dizinlerine sembolik bağlar oluşturuyoruz, çünkü toctree gerçekten de belge kaynak ağacının dışındaki dosyaları dahil etmek istemiyor gibi görünüyor.

Bu nedenle, dosyaları kullanarak kopyalamak yerine shutil, Project/docs/specdizindeki tüm modüllerinize sembolik bağlantılar eklemeyi deneyebilirsiniz . Size bir sembolik bağlantı oluşturursanız, Project/modulesbu dosyalara toc ağacınızda basitçe modules/module1/docs/module1vb.


3
Bu çok kötü. Word belgelerinden Sphinx'e geçmeye çalışırken gördüğüm avantajlardan biri, yeniden kullanılabilir bir donanım modülünü projenize aktarabilmeniz ve yalnızca tasarımın ana belgelerine belgelerini dahil edebilmenizdir. Sembolik bağları kullanırdım ama ne yazık ki pencerelerdeyim.
mc_electron

Gelecek nesil için, alt modül doc klasörünü sys.pathconf.py içindeki konumuna eklemeyi denedim ama işe yaramadı.
mc_electron

1
@mc_electron Windows'ta symlinkler için mklink komutunu kullanın.
Jeremy

12

Conf.py'de, sys.path ve os.path kullanarak sisteme göreli yolları ekleyin

Örneğin:

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

Daha sonra, aynı dizindeki ilk dosyalara başvurarak her zamanki gibi index.rst dosyanızı kullanın. Yerel Sphinx klasörümdeki index.rst dosyamda:

Contents:

.. toctree::
   :maxdepth: 4

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

Daha sonra package1.rst'de, sadece göreceli paketlere normal olarak başvurabilmelisiniz.

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:

Bu yeni davranış mı? Hangi sürüme eklendi?
mc_electron

2
Yeni başlayanları bilgilendirmek için daha fazla açıklanırsa harika olur. Mesela nedir Package1? Bu ilk pathkullanılarak sys.path.insertmı belirtildi ? Veya bir yerlerde bir eğitim var mı? İlgili dokümanı bulamıyorum.
Manavalan Gajapathy

Package1TOC, bölümün başlığı olarak "Paket1" i gösterecek şekilde adlandırılmış bir giriştir.
PabloC

3
Bu, başka bir dizindeki Python modüllerini otomatik olarak taramanıza izin verir, ancak RST dosyalarını başka bir dizine eklemenize izin vermez.
mc_electron

1

Sphinx'i yalnızca index.rst dosyasını kökte ve diğer tüm sfenks öğelerini Project / docs'da olacak şekilde yapılandırmak da mümkündür:

Windows için tüm sphinx dosyalarını ve dizinlerini (index.rst hariç) docs / içine taşıdım ve değiştirdim:

docs/make.bat: Değişiklik

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

-e

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

docs/conf.py: Ekle

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

Teşekkürler! Bu konfigürasyon, aynı dokümantasyondan referans alınan bir havuzda birden fazla ilgili pakete sahip olduğumda benim için çok iyi çalışıyor.
Gregor Müllegger

1

Oldukça benzer problemimi harici bir jupyter not defteri eklemek istediğim farkla çözdüm. Nbsphinx'i kurmuştum ama çalışmasını sağlayamadım. Ne işe yaramadı:

  1. Kökü yola dahil etmek istediğim dizine sahiptim:

    conf.py:

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

  2. .. include:: directiveDosyayı kullanmak belgelere dahil edildi, ancak olduğu gibi.

Sonunda sorunu çözen , nbsphinx-link paketini kurmaktı


0

Bir çözüm, yedeklenen göreceli bağlantıları kullanmak gerçekten imkansızsa , dosyaları spesifikasyondaki spesifikasyon klasör ağacına kopyalamak için ../kullanabilmemdir , ancak kesinlikle gerekli olmadıkça birden fazla kopyaya sahip olmamayı tercih ederim.shutilconf.py

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.