]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Add shebang documentation for PyManager 26.3b1 (GH-150931)
authorSteve Dower <steve.dower@python.org>
Thu, 4 Jun 2026 20:37:18 +0000 (21:37 +0100)
committerGitHub <noreply@github.com>
Thu, 4 Jun 2026 20:37:18 +0000 (21:37 +0100)
Doc/using/windows.rst

index eea1e2f64a468d0273a9091402ed308f28ffdb92..5b715d4614dad8f8ac1f86afe97a0b8ccb40ad57 100644 (file)
@@ -455,6 +455,12 @@ customization.
        Python runtimes, or false to prevent it.
        By default, true.
 
+   * - ``shebang_templates``
+     - (none)
+     - Mapping from shebang line template to alternative command, such as
+       ``py -V:<tag>`` or a substitute string.
+       See :ref:`pymanager-shebang` for more details.
+
    * - ``log_level``
      - ``PYMANAGER_VERBOSE``, ``PYMANAGER_DEBUG``
      - Set the default level of output (0-50).
@@ -568,6 +574,30 @@ which the path to the script and any additional arguments will be appended.
 This functionality may be disabled by the ``shebang_can_run_anything``
 configuration option.
 
+Since version 26.3 of the Python install manager, custom shebang templates may
+be added to your configuration file. Add the ``shebang_templates`` object with
+one member for each template (the string to match) and the command to use when
+the template is matched. Most commands should be ``py -V:<tag>`` (or ``pyw``) to
+launch one of your installed runtimes. The ``py -3.<version>`` form is also
+allowed, as is a plain ``py`` to launch the default. No other arguments are
+supported.
+
+.. code:: json5
+
+   {
+       "shebang_templates": {
+           "/usr/bin/python": "py",
+           "/usr/bin/my_custom_python": "py -V:MyCustomPython/3"
+       }
+   }
+
+If the substitute command is not ``py`` or ``pyw``, it will be written back into
+the shebang and regular handling continues. If launching arbitrary executables
+is permitted, then providing a full path will allow you to redirect from Python
+to any executable. The template should match either the entire line (ignoring
+leading and trailing whitespace), or up to the first space in the shebang line.
+
+
 .. note::
 
    The behaviour of shebangs in the Python install manager is subtly different