GH-127724: don't use sysconfig to calculate the venv local include path (#127731)

This commit is contained in:
Filipe Laíns 🇵🇸 2024-12-12 21:41:46 +00:00 committed by GitHub
parent a8ffe66154
commit 8ac307f0d6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -103,8 +103,6 @@ class EnvBuilder:
vars = {
'base': env_dir,
'platbase': env_dir,
'installed_base': env_dir,
'installed_platbase': env_dir,
}
return sysconfig.get_path(name, scheme='venv', vars=vars)
@ -175,9 +173,20 @@ class EnvBuilder:
context.python_dir = dirname
context.python_exe = exename
binpath = self._venv_path(env_dir, 'scripts')
incpath = self._venv_path(env_dir, 'include')
libpath = self._venv_path(env_dir, 'purelib')
# PEP 405 says venvs should create a local include directory.
# See https://peps.python.org/pep-0405/#include-files
# XXX: This directory is not exposed in sysconfig or anywhere else, and
# doesn't seem to be utilized by modern packaging tools. We keep it
# for backwards-compatibility, and to follow the PEP, but I would
# recommend against using it, as most tooling does not pass it to
# compilers. Instead, until we standardize a site-specific include
# directory, I would recommend installing headers as package data,
# and providing some sort of API to get the include directories.
# Example: https://numpy.org/doc/2.1/reference/generated/numpy.get_include.html
incpath = os.path.join(env_dir, 'Include' if os.name == 'nt' else 'include')
context.inc_path = incpath
create_if_needed(incpath)
context.lib_path = libpath