From: Jani Nikula <jani.nikula@linux.intel.com>
To: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>,
Linux Doc Mailing List <linux-doc@vger.kernel.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 10/19] tools/docs: sphinx-build-wrapper: add support to run inside venv
Date: Fri, 12 Sep 2025 12:22:42 +0300 [thread overview]
Message-ID: <4d7acb77be634212056426aee139496da42dc520@intel.com> (raw)
In-Reply-To: <20250912104639.4781b638@foz.lan>
On Fri, 12 Sep 2025, Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote:
> Em Wed, 10 Sep 2025 13:51:40 +0300
> Jani Nikula <jani.nikula@linux.intel.com> escreveu:
>
>> On Thu, 04 Sep 2025, Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote:
>> > Sometimes, it is desired to run Sphinx from a virtual environment.
>> > Add a command line parameter to automatically build Sphinx from
>> > such environment.
>>
>> Why?
>
> In my case, to be able to test build with different Sphinx versions.
> On some distros, only venv works.
I mean why add the complexity of running inside a venv in the wrapper.
>> If you want Sphinx from a virtual environment, you enter the
>> environment, and run the regular build, with sphinx-build from the PATH
>> that points at the venv.
>
> when you do that, ./scripts/spdxcheck.py breaks, affecting checkpatch.
Then you could turn the whole argument around, and say spdxcheck.py
should jump through venv and dependency hoops instead of the docs build.
The point is, it should be the user's responsibility to deal with the
environment and the dependencies.
If they're setting up a virtual environment, and it affects checkpatch,
then they should also include the spdxcheck.py dependencies in the
virtual environment.
This feels like reinventing pipx in a Sphinx wrapper.
We should *reduce* the complexity, not increase it.
>> We don't do this kind of extra magic for any other tools, I honestly
>> don't understand why we'd do this for Sphinx. This just adds complexity
>> for no good reason.
>
>> >
>> > Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
>> > ---
>> > tools/docs/sphinx-build-wrapper | 30 +++++++++++++++++++++++++++---
>> > 1 file changed, 27 insertions(+), 3 deletions(-)
>> >
>> > diff --git a/tools/docs/sphinx-build-wrapper b/tools/docs/sphinx-build-wrapper
>> > index ea9f8e17b0bc..cf7b30bc40ff 100755
>> > --- a/tools/docs/sphinx-build-wrapper
>> > +++ b/tools/docs/sphinx-build-wrapper
>> > @@ -63,6 +63,7 @@ from jobserver import JobserverExec # pylint: disable=C0413,C0411,E0401
>> > #
>> > # Some constants
>> > #
>> > +VENV_DEFAULT = "sphinx_latest"
>> > MIN_PYTHON_VERSION = PythonVersion("3.7").version
>> > PAPER = ["", "a4", "letter"]
>> >
>> > @@ -119,8 +120,9 @@ class SphinxBuilder:
>> >
>> > return path
>> >
>> > - def __init__(self, builddir, verbose=False, n_jobs=None):
>> > + def __init__(self, builddir, venv=None, verbose=False, n_jobs=None):
>> > """Initialize internal variables"""
>> > + self.venv = venv
>> > self.verbose = None
>> >
>> > #
>> > @@ -195,6 +197,21 @@ class SphinxBuilder:
>> >
>> > self.env = os.environ.copy()
>> >
>> > + #
>> > + # If venv command line argument is specified, run Sphinx from venv
>> > + #
>> > + if venv:
>> > + bin_dir = os.path.join(venv, "bin")
>> > + if not os.path.isfile(os.path.join(bin_dir, "activate")):
>> > + sys.exit(f"Venv {venv} not found.")
>> > +
>> > + # "activate" virtual env
>> > + self.env["PATH"] = bin_dir + ":" + self.env["PATH"]
>> > + self.env["VIRTUAL_ENV"] = venv
>> > + if "PYTHONHOME" in self.env:
>> > + del self.env["PYTHONHOME"]
>> > + print(f"Setting venv to {venv}")
>> > +
>> > def run_sphinx(self, sphinx_build, build_args, *args, **pwargs):
>> > """
>> > Executes sphinx-build using current python3 command and setting
>> > @@ -209,7 +226,10 @@ class SphinxBuilder:
>> >
>> > cmd = []
>> >
>> > - cmd.append(sys.executable)
>> > + if self.venv:
>> > + cmd.append("python")
>> > + else:
>> > + cmd.append(sys.executable)
>> >
>> > cmd.append(sphinx_build)
>> >
>> > @@ -533,11 +553,15 @@ def main():
>> > parser.add_argument('-j', '--jobs', type=jobs_type,
>> > help="Sets number of jobs to use with sphinx-build")
>> >
>> > + parser.add_argument("-V", "--venv", nargs='?', const=f'{VENV_DEFAULT}',
>> > + default=None,
>> > + help=f'If used, run Sphinx from a venv dir (default dir: {VENV_DEFAULT})')
>> > +
>> > args = parser.parse_args()
>> >
>> > PythonVersion.check_python(MIN_PYTHON_VERSION)
>> >
>> > - builder = SphinxBuilder(builddir=args.builddir,
>> > + builder = SphinxBuilder(builddir=args.builddir, venv=args.venv,
>> > verbose=args.verbose, n_jobs=args.jobs)
>> >
>> > builder.build(args.target, sphinxdirs=args.sphinxdirs, conf=args.conf,
>>
>
>
>
> Thanks,
> Mauro
>
--
Jani Nikula, Intel
next prev parent reply other threads:[~2025-09-12 9:22 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-04 7:33 [PATCH v4 00/19] Split sphinx call logic from docs Makefile Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 01/19] scripts/jobserver-exec: move the code to a class Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 02/19] scripts/jobserver-exec: move its class to the lib directory Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 03/19] scripts/jobserver-exec: add a help message Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 04/19] scripts: sphinx-pre-install: move it to tools/docs Mauro Carvalho Chehab
2025-09-04 16:42 ` Jonathan Corbet
2025-09-05 7:39 ` Mauro Carvalho Chehab
2025-09-05 12:25 ` Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 05/19] tools/docs: python_version: move version check from sphinx-pre-install Mauro Carvalho Chehab
2025-09-10 10:14 ` Jani Nikula
2025-09-10 12:24 ` Mauro Carvalho Chehab
2025-09-11 10:28 ` Jani Nikula
2025-09-11 10:45 ` Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 06/19] tools/docs: python_version: drop a debug print Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 07/19] tools/docs: python_version: allow check for alternatives and bail out Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 08/19] tools/docs: sphinx-build-wrapper: add a wrapper for sphinx-build Mauro Carvalho Chehab
2025-09-09 14:53 ` Jonathan Corbet
2025-09-09 15:59 ` Mauro Carvalho Chehab
2025-09-09 18:56 ` Jonathan Corbet
2025-09-09 20:53 ` Mauro Carvalho Chehab
2025-09-09 15:21 ` Jonathan Corbet
2025-09-09 16:06 ` Mauro Carvalho Chehab
2025-09-10 10:46 ` Jani Nikula
2025-09-10 12:59 ` Mauro Carvalho Chehab
2025-09-10 13:33 ` Mauro Carvalho Chehab
2025-09-12 10:15 ` Akira Yokosawa
2025-09-12 11:04 ` Mauro Carvalho Chehab
2025-09-12 14:03 ` Akira Yokosawa
2025-09-12 14:50 ` Mauro Carvalho Chehab
2025-09-15 8:27 ` Akira Yokosawa
2025-09-15 10:58 ` Mauro Carvalho Chehab
2025-09-15 12:54 ` Jani Nikula
2025-09-15 13:50 ` Mauro Carvalho Chehab
2025-09-15 14:33 ` Jani Nikula
2025-09-15 15:05 ` Mauro Carvalho Chehab
2025-09-11 10:23 ` Jani Nikula
2025-09-11 11:37 ` Mauro Carvalho Chehab
2025-09-11 13:38 ` Jonathan Corbet
2025-09-11 19:33 ` Jani Nikula
2025-09-11 19:47 ` Jonathan Corbet
2025-09-12 8:06 ` Mauro Carvalho Chehab
2025-09-12 10:16 ` Jani Nikula
2025-09-12 11:34 ` Vegard Nossum
2025-09-13 10:18 ` Mauro Carvalho Chehab
2025-09-12 11:41 ` Mauro Carvalho Chehab
2025-09-12 8:28 ` Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 09/19] tools/docs: sphinx-build-wrapper: add comments and blank lines Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 10/19] tools/docs: sphinx-build-wrapper: add support to run inside venv Mauro Carvalho Chehab
2025-09-10 10:51 ` Jani Nikula
2025-09-12 8:46 ` Mauro Carvalho Chehab
2025-09-12 9:22 ` Jani Nikula [this message]
2025-09-12 12:34 ` Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 11/19] docs: parallel-wrapper.sh: remove script Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 12/19] docs: Makefile: document latex/PDF PAPER= parameter Mauro Carvalho Chehab
2025-09-10 10:54 ` Jani Nikula
2025-09-12 8:56 ` Mauro Carvalho Chehab
2025-09-12 9:23 ` Jani Nikula
2025-09-12 10:34 ` Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 13/19] tools/docs: sphinx-build-wrapper: add an argument for LaTeX interactive mode Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 14/19] tools/docs,scripts: sphinx-*: prevent sphinx-build crashes Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 15/19] tools/docs: sphinx-build-wrapper: allow building PDF files in parallel Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 16/19] docs: add support to build manpages from kerneldoc output Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 17/19] tools: kernel-doc: add a see also section at man pages Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 18/19] scripts: kdoc_parser.py: warn about Python version only once Mauro Carvalho Chehab
2025-09-04 7:33 ` [PATCH v4 19/19] tools/docs: sphinx-* break documentation bulds on openSUSE Mauro Carvalho Chehab
2025-09-05 16:07 ` [PATCH v4 00/19] Split sphinx call logic from docs Makefile Jonathan Corbet
2025-09-06 9:40 ` Mauro Carvalho Chehab
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4d7acb77be634212056426aee139496da42dc520@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=corbet@lwn.net \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mchehab+huawei@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®