[PYTHON] Je voulais ignorer certaines extensions lors de la création de la documentation Sphinx

supposition

Je suis une personne qui écrit des diapositives Reveal.js dans Sphinx sur la base de mes propres sphinx-revealjs.

Jusqu'à ce que vous utilisiez des extensions avec Sphinx

Lors de l'écriture de la source de la diapositive avec la combinaison de Sphinx + Revealjs, il existe une telle scène.

presentation.rst


Mouvement Ansible(Contenu)
-------------------

.. 60sec

.. todo::Playbook de la démo ci-dessus

Fichier d'inventaire

*Définir une liste de serveurs pour exécuter des traitements et des informations simples

La directive todo utilisée ici vous permet d'afficher todo comme dans Sphinx. Ceci est utile pour prendre des notes telles que «quoi écrire après ceci» ou «ce que vous vouliez écrire».

Donc, comme ce n'est pas une extension intégrée, il est nécessaire de la spécifier comme une extension dans conf.py utilisée lors de la construction avec sphinx, mais ...

conf.py


extensions = [
    'sphinx.ext.todo',
    'sphinx_revealjs',
]

La construction avec un constructeur personnalisé échoue

Lorsque je l'exécute, j'obtiens une erreur comme celle-ci et la construction échoue.

$ pipenv run make revealjs
Une exception s'est produite
  File "/home/attakei/.local/share/virtualenvs/slides-P9x2JL-m/lib/python3.7/site-packages/sphinx/writers/html5.py", line 885, in unknown_visit
    raise NotImplementedError('Unknown node: ' + node.__class__.__name__)
NotImplementedError: Unknown node: todo_node

Eh bien, j'obtiens cette erreur même si l'extension Sphinx doit être enregistrée correctement. Lorsque je règle le générateur sur html, il semble que la construction se termine normalement. Cela semble être dû au propre constructeur de

Suivre les erreurs ... encore cette fois

Diviser l'appel d'extension du côté conf.py

Modifier la librairie sent beaucoup, donc pour le moment, jouez avec conf.py

** "Si vous spécifiez describejs comme constructeur, n'enregistrez pas sphinx.ext.todo dans l'extension "**

Au but.

conf.py


extensions = [
    'sphinx_revealjs',
]

if is_not_builder_revealjs:
    extensions += [
       'sphinx.ext.todo',
    ]

Comme ça

Confirmer grossièrement le constructeur au moment de conf.py (sous des conditions limitées)

Sphinx recommande une construction basée sur la marque,

%: Makefile
	@$(SPHINXBUILD) -b $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

De cette manière, la commande sphinx-build est passée. Et heureusement, le module sphinx.cmd.build, qui est la source de la commande, semble être utilisé sur la ligne de commande après avoir généré séparément un analyseur d'arguments avec une fonction.

https://github.com/sphinx-doc/sphinx/blob/master/sphinx/cmd/build.py#L97

Cela ressemble à un aspect rugueux, et il semble que cela puisse être utilisé tel quel, alors je vais plonger dans conf.py.

conf.py


import sys
from sphinx.cmd.build import get_parser


sphinx_args = get_parser().parse_args(sys.argv[1:])

extensions = [
    'sphinx_revealjs',
]

if sphinx_args.builder != 'revealjs':
    extensions += [
        'sphinx.ext.todo',
    ]

Maintenant ça. Lorsque vous construisez, ...

$ pipenv run make revealjs



Copie d'un fichier statique... ...Terminé
copying extra files...Terminé
dumping search index in Japanese (code: ja)...Terminé
dumping object inventory...Terminé
construire le succès, 3 warnings.

Réussi: +1:

Recommended Posts

Je voulais ignorer certaines extensions lors de la création de la documentation Sphinx
Lorsque vous souhaitez que le thème de votre documentation Sphinx soit le même
Ce que j'ai fait quand je voulais rendre Python plus rapide -Édition Numba-
[Django] Je voulais tester lors du POST d'un fichier volumineux [TDD]
Étape Wercker pour compiler la documentation Sphinx
Chaîne de hachage que je voulais éviter (2)
Je voulais faire évoluer cGAN vers ACGAN
Chaîne de hachage que je voulais éviter (1)
Lors de l'introduction de l'API Google Cloud Vision sur les rails, j'ai suivi la documentation.
Ce à quoi j'ai fait référence en étudiant tkinter
Je voulais résoudre ABC160 avec Python
Je voulais résoudre ABC159 avec Python
Je voulais résoudre ABC172 avec Python
Je voulais vraiment copier avec du sélénium
Implémentation de DQN avec TensorFlow (je voulais ...)