Python sphinx 根据生成器选择Sphinx主题

Python sphinx 根据生成器选择Sphinx主题,python-sphinx,Python Sphinx,我正在使用Sphinx为Windows项目生成文档。我生成两种类型的文档:HTML和Microsoft编译的HTML帮助。我想用不同的主题生成这些 下面是一个玩具项目,它演示了这个问题: project\ +-- source\ | +-- conf.py | +-- contents.rst +-- make-doc.bat 来源/conf.py: project = 'Example' html_theme = 'classic' #html_th

我正在使用Sphinx为Windows项目生成文档。我生成两种类型的文档:HTML和Microsoft编译的HTML帮助。我想用不同的主题生成这些

下面是一个玩具项目,它演示了这个问题:

project\
   +-- source\
   |     +-- conf.py
   |     +-- contents.rst
   +-- make-doc.bat
来源/conf.py:

project = 'Example'

html_theme = 'classic'
#html_theme = 'sphinx_rtd_theme'

htmlhelp_basename = 'example'
source/contents.rst:

Contents
========

Content here
make-doc.bat:

SET SPHINX_BUILD="C:\Program Files\Python37\Scripts\sphinx-build.exe"
SET HHC="C:\Program Files (x86)\HTML Help Workshop\hhc.exe"

RMDIR /S/Q build

%SPHINX_BUILD%  source build\html

%SPHINX_BUILD% -b htmlhelp source build\htmlhelp
%HHC% build\htmlhelp\example.hhp
运行
make doc.bat
,HTML帮助看起来“ok”,而
example.chm
看起来很好

将“conf.py”更改为使用
“sphinx\u rtd\u主题”
,然后再次运行
make doc.bat
。现在HTML帮助看起来“很棒”。但是当您打开
example.chm
时,会立即显示一个Javascript错误。对于您导航到的每个页面(这是此玩具项目中唯一的页面),都会弹出此错误

显然,
sphinx\u rtd\u主题
与Microsoft HTML帮助编译器之间不兼容

在修复错误/不兼容之前,我对使用
classic
主题的编译帮助没有意见,但我希望在线HTML帮助使用
sphinx\u rtd\u主题

我可以基于当前生成器在
conf.py
中进行条件编译吗

if tags.has('builder_htmlhelp'):
    html_theme = 'classic'
else:
    html_theme = 'sphinx_rtd_theme'
不工作,因为在解析
conf.py
之后才会设置
builder\u xxx


更新 上面的
make doc.bat
批处理脚本实际上并不存在于实际项目中。我添加它是为了创建一个最少的示例来演示这个问题。实际生成环境使用
setup.py

py -3.7 setup.py build_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'),
            }
        },
    )

您是否尝试将配置值传递到?您可以作为环境变量,在命令行或.bat文件中这样做。@StevePiercy我有点误解了这个问题。没有要编辑的批处理文件<代码>py-3.7 setup.py build_sphinx
用于调用sphinx。构建环境位于我无权访问的远程计算机上;我必须经受考验才能做出改变。但是我可以很容易地更改Sphinx使用的
conf.py
文件,所以我真的希望找到某种方法来检测
conf.py
中的构建器并切换主题。我对
setup.py
脚本也有控制权,因此如果可以检测生成器并向sphinx调用添加参数,这可能也会起作用。如果内存足够,conf.py将提供sys.args供您检查调用命令行中的内容。这就是公式混乱的地方,在上一条评论中,您说make文件没有被调用,您直接使用setup.py
命令选项调用sphinx build(该命令)?好的,或者在setup.py或cmd行中硬编码您想要的生成器,将生成器传递到setup.py,并将其从sys.args解析为
命令\u options
(这将在从setup.py调用conf.py后可用)…我希望我能够表达我自己。您是否尝试将配置值传递到?您可以作为环境变量,在命令行或.bat文件中这样做。@StevePiercy我有点误解了这个问题。没有要编辑的批处理文件<代码>py-3.7 setup.py build_sphinx
用于调用sphinx。构建环境位于我无权访问的远程计算机上;我必须经受考验才能做出改变。但是我可以很容易地更改Sphinx使用的
conf.py
文件,所以我真的希望找到某种方法来检测
conf.py
中的构建器并切换主题。我对
setup.py
脚本也有控制权,因此如果可以检测生成器并向sphinx调用添加参数,这可能也会起作用。如果内存足够,conf.py将提供sys.args供您检查调用命令行中的内容。这就是公式混乱的地方,在上一条评论中,您说make文件没有被调用,您直接使用setup.py
命令选项调用sphinx build(该命令)?好的,或者在setup.py或cmd行中硬编码您想要的生成器,将生成器传递到setup.py,并将其从sys.args解析为
命令\u options
(这将在从setup.py调用conf.py时可用)…我希望我能够表达自己的想法。