Find python3.xx on windows

pull/11530/head
Charles Brunet 2 years ago committed by Eli Schwartz
parent 107f933b52
commit 51b9f2f1a5
  1. 5
      docs/markdown/Python-module.md
  2. 6
      docs/markdown/snippets/python-find-version.md
  3. 4
      mesonbuild/modules/python.py

@ -37,7 +37,10 @@ If provided, it can be:
- One of `python2` or `python3`: in either case, the module will try
some alternative names: `py -2` or `py -3` on Windows, and `python`
everywhere. In the latter case, it will check whether the version
provided by the sysconfig module matches the required major version
provided by the sysconfig module matches the required major version.
*Since 1.2.0*, searching for minor version (e.g. `python3.11`) also
works on Windows.
Keyword arguments are the following:

@ -0,0 +1,6 @@
## Find more specific python version on Windows
You can now use `python3.x`, where `x` is the minor version,
to find a more specific version of python on Windows, when
using the python module. On other platforms, it was already
working as `python3.x` is the executable name.

@ -300,12 +300,12 @@ class PythonModule(ExtensionModule):
# https://www.python.org/dev/peps/pep-0397/
@staticmethod
def _get_win_pythonpath(name_or_path: str) -> T.Optional[str]:
if name_or_path not in ['python2', 'python3']:
if not name_or_path.startswith(('python2', 'python3')):
return None
if not shutil.which('py'):
# program not installed, return without an exception
return None
ver = {'python2': '-2', 'python3': '-3'}[name_or_path]
ver = f'-{name_or_path[6:]}'
cmd = ['py', ver, '-c', "import sysconfig; print(sysconfig.get_config_var('BINDIR'))"]
_, stdout, _ = mesonlib.Popen_safe(cmd)
directory = stdout.strip()

Loading…
Cancel
Save