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 - One of `python2` or `python3`: in either case, the module will try
some alternative names: `py -2` or `py -3` on Windows, and `python` some alternative names: `py -2` or `py -3` on Windows, and `python`
everywhere. In the latter case, it will check whether the version 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: 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/ # https://www.python.org/dev/peps/pep-0397/
@staticmethod @staticmethod
def _get_win_pythonpath(name_or_path: str) -> T.Optional[str]: 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 return None
if not shutil.which('py'): if not shutil.which('py'):
# program not installed, return without an exception # program not installed, return without an exception
return None 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'))"] cmd = ['py', ver, '-c', "import sysconfig; print(sysconfig.get_config_var('BINDIR'))"]
_, stdout, _ = mesonlib.Popen_safe(cmd) _, stdout, _ = mesonlib.Popen_safe(cmd)
directory = stdout.strip() directory = stdout.strip()

Loading…
Cancel
Save