2012-04-17 11 views
52

Sto usando Sphinx per documentare un progetto non Python. Voglio distribuire le cartelle ./doc in ogni sottomodulo, contenente i file submodule_name.rst per documentare quel modulo. Quindi voglio succhiare quei file nella gerarchia principale per creare una specifica per l'intero progetto.Può sfingi link a documenti che non si trovano nelle directory sotto il documento di root?

Ie:

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

ho cercato di includere i file nel documento toctree maestro project_spec.rst come questo:

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

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

Tuttavia questo errore messaggio Risultati:

ATTENZIONE: toctree contiene riferimenti a documenti non esistenti u'modules/module1/docs/module1 '

Non è possibile utilizzare in qualche modo il documento ../?

Aggiornamento: Aggiunto posizione conf.py

+0

È necessario aggiungere l'estensione '.rst' alla riga' Modulo 1 <../../ moduli/modulo1/docs/modulo1> '? – Chris

+0

Non credo perché in [Sphinx Docs] (http://sphinx.pocoo.org/concepts.html): poiché i file sorgenti di reST possono avere estensioni diverse (alcune persone come .txt, alcune come .rst - l'estensione può essere configurata con source_suffix) e diversi SO hanno separatori di percorso diversi, Sphinx li astrae: tutti i "nomi di documenti" sono relativi alla directory di origine, l'estensione viene rimossa e i separatori di percorso vengono convertiti in barre. –

+0

OK, solo una supposizione! Quindi presumo che 'source_suffix' sia impostato su' .rst' nel tuo file di configurazione 'conf.py'. Inoltre, dov'è questo file nella tua gerarchia di directory, dal momento che sembra che tutti i percorsi siano relativi a questo file? – Chris

risposta

64

Sì, è possibile!

Al posto di un collegamento simbolico (che non funziona su Windows), creare un documento stub che non contiene nulla ma una direttiva .. include::.

Mi sono imbattuto in questo tentativo di collegamento a un file README che si trovava nella parte superiore dell'albero dei sorgenti.Ho messo il seguente in un file chiamato readme_link.rst:

.. include:: ../README 

Poi nel index.rst, ho fatto il toctree simile:

Contents: 

.. toctree:: 
    :maxdepth: 2 

    readme_link 
    other_stuff 

E ora ho un link al mio note di rilascio sulla mia pagina di indice.

Grazie a http://reinout.vanrees.org/weblog/2010/12/08/include-external-in-sphinx.html per il suggerimento

+3

Il README ha immagini o simili che hanno percorsi relativi che non sono validi all'interno della directory index.rst è in, come lo gestisci? Ottengo errori di 'file immagine non leggibile'. –

+0

Sì, puoi farlo anche in Unix con i link simbolici. Puoi creare un collegamento con lo stesso nome della cartella docs (cioè 'docs') che si collega a current-dir ('.'). Quindi puoi usare: download: 'docs \ foo.rst' e questo funzionerebbe per i file con la cartella' docs' o con il genitore. – ankostis

+0

Questo funziona per me. Penso che questa dovrebbe essere la risposta accettata, in quanto la soluzione sembra più pulita e più portatile della soluzione symlink. – damjan

0

Una soluzione, se è davvero impossibile utilizzare i collegamenti relativi che eseguono il backup ../ è che ho potuto utilizzare shutil per copiare i file nella struttura di cartelle specifiche nel conf.py per il spec, ma preferirei non avere più copie se non assolutamente necessario.

12

Sembra che la risposta è no, i documenti elencati nella toc-albero devono risiedere all'interno del source directory, cioè la directory contenente i master document e conf.py (e tutte le sottodirectory).

Dal sphinx-dev mailing list:

A STScI, scriviamo la documentazione per i singoli progetti in Sfinge, e poi anche produrre un "documento master", che comprende (usando toctree) un certo numero di questi altri documenti specifici del progetto . Per fare questo, creiamo i link simbolici nella directory dei sorgenti dei documenti del documento master alle directory dei sorgenti dei documenti del progetto, poiché in realtà non sembra che il toctree voglia includere i file al di fuori dell'albero dei sorgenti dei documenti.

Quindi, piuttosto che la copia dei file utilizzando shutil si potrebbe provare ad aggiungere link simbolici a tutti i moduli nella directory Project/docs/spec. Se si crea un collegamento simbolico a Project/modules, si farebbe quindi riferimento a questi file nel proprio albero di toce semplicemente come modules/module1/docs/module1 ecc.

+2

Peccato. Uno dei vantaggi che vedo nel tentativo di passare da Documenti Word a Sphinx è che è possibile importare un modulo hardware riutilizzabile nel progetto e includere semplicemente la documentazione nella documentazione master per il progetto. Vorrei usare i collegamenti simbolici ma purtroppo sono su Windows. –

+0

Per i posteri, ho provato ad aggiungere la cartella doc del sottomodulo a 'sys.path' nella conf.py ma non ha funzionato. –

+0

https://bitbucket.org/birkenfeld/sphinx/issue/701/relative-links-in-toctree –

-1

E 'anche possibile configurare sfinge di avere solo il file index.rst nella radice e il tutte le altre cose sfinge nel progetto/docs:

Per le finestre mi sono trasferito tutti i file Sfinge e dirs (tranne index.rst) in docs/e cambiato:

docs/make.bat: Modifica

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

a

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

docs/conf.py: Aggiungere

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

In conf.py, aggiungere i percorsi relativi al sistema utilizzando sys.path e os.path

Ad esempio:

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

Quindi utilizzare index.rst come al solito, facendo riferimento ai primi file nella stessa directory. Così nel mio index.rst nella mia cartella Sphinx locale:

Contents: 

.. toctree:: 
    :maxdepth: 4 

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

Poi, nel package1.rst, si dovrebbe essere in grado di fare riferimento solo i relativi pacchetti normalmente.

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: 
+0

Is questo nuovo comportamento? In quale versione è stata aggiunta? –

Problemi correlati