#python-sphinx
#python-sphinx
Вопрос:
Я использую Sphinx для создания документации для проекта Windows. Я создаю два типа документации: HTML и скомпилированную Microsoft HTML-справку. Я бы хотел сгенерировать их с разными темами.
Вот игрушечный проект, который демонстрирует проблему:
project
-- source
| -- conf.py
| -- contents.rst
-- make-doc.bat
source/conf.py:
project = 'Example'
html_theme = 'classic'
#html_theme = 'sphinx_rtd_theme'
htmlhelp_basename = 'example'
источник/contents.rst:
Contents
========
Content here
make-doc.bat:
SET SPHINX_BUILD="C:Program FilesPython37Scriptssphinx-build.exe"
SET HHC="C:Program Files (x86)HTML Help Workshophhc.exe"
RMDIR /S/Q build
%SPHINX_BUILD% source buildhtml
%SPHINX_BUILD% -b htmlhelp source buildhtmlhelp
%HHC% buildhtmlhelpexample.hhp
Запустите make-doc.bat
, и справка HTML выглядит «ок», и example.chm
все выглядит нормально.
Изменить «conf.py » использовать 'sphinx_rtd_theme'
, а затем make-doc.bat
снова запустить. Теперь HTML-справка выглядит «великолепно». Но при открытии example.chm
сразу отображается ошибка Javascript. Эта ошибка появляется для каждой страницы, на которую вы переходите (это единственная страница в этом игрушечном проекте).
Очевидно, что существует несовместимость между компилятором sphinx_rtd_theme
справки HTML и Microsoft.
Пока эта ошибка / несовместимость не будет исправлена, меня устраивает скомпилированная справка по classic
теме, но я бы хотел использовать интерактивную HTML-справку sphinx_rtd_theme
.
Могу ли я получить условную компиляцию на conf.py
основе текущего builder?
if tags.has('builder_htmlhelp'):
html_theme = 'classic'
else:
html_theme = 'sphinx_rtd_theme'
Не работает, потому что builder_xxx
тег не устанавливается до conf.py
тех пор, пока не будет проанализирован.
Обновить
Приведенный make-doc.bat
выше пакетный сценарий фактически не существует в реальном проекте. Я добавил ее, чтобы создать минимальный пример для демонстрации проблемы. Фактическая среда сборки использует setup.py
и
py -3.7 setup.py build_sphinx
чтобы вызвать Sphinx. Таким образом, модификация, добавленная setup.py
для добавления чего-либо в среду сборки, которая conf.py
может обнаруживать и изменять тему на основе, может работать.
setup.py:
from setuptools import setup
name = 'example'
version = '1.0'
release = '1.0.0'
setup(
name=name,
version=version,
release=release,
description='Help Example',
python_requires='>=3',
install_requires=['pywin32'],
packages=['example'],
command_options={
'build_sphinx': {
'project': ('setup.py', name),
'version': ('setup.py', version),
'release': ('setup.py', release),
'source_dir': ('setup.py', 'source'),
'builder': ('setup.py', 'html htmlhelp'),
}
},
)
Комментарии:
1. Вы пробовали передавать значения конфигурации в
sphinx-build
? Вы можете сделать это как переменные среды, в командной строке или в вашем файле .bat.2. @StevePiercy я немного исказил проблему. Нет командного файла для редактирования;
py -3.7 setup.py build_sphinx
используется для вызова Sphinx. Среда сборки находится на удаленной машине, к которой у меня нет доступа; Я должен пройти через обручи, чтобы внести изменения. Но я могу легко изменитьconf.py
файл, который использует Sphinx, поэтому я действительно надеюсь на какой-то способ обнаружить builder и переключить темы внутриconf.py
. У меня также есть контроль надsetup.py
сценарием, поэтому, если он может обнаружить builder и добавить аргументы к вызову sphinx, это тоже может сработать.3. Если память мне не изменяет, conf.py у вас будут доступны sys.args, чтобы вы могли проверить, что находится в вызывающей командной строке. Вот где ваша формулировка вызывает путаницу, в вашем последнем комментарии вы говорите, что файл make не вызывается, и вы вызываете sphinx-build (команду) напрямую, используя setup.py
command-options
? Ну, либо жестко запрограммируйте builder, который вы хотите в setup.py или cmd-строка передает конструктор в setup.py и проанализируйте его из sys.args в acommand_options
(который впоследствии будет доступен, когда conf.py вызывается из setup.py )… Надеюсь, я смог выразить себя.