feat: support pypa build (#521)
* feat: support pypa build fix: update `cibuildwheel.linux.troubleshoot` to know about build Workaround issue with PyPy venv module by installing build[virtualenv] fix: test_dependency_constraints_file when using build fix: test/test_pep518.py fix: use `strtobool` to parse `CIBW_PYPA_BUILD` fix: update `cibuildwheel.linux.troubleshoot` to know about `python -m pip wheel` test: use `build_mode` in `test/test_dependency_versions.py` tests * refactor: use build-backend instead * Apply suggestions from code review Co-authored-by: Joe Rickerby <joerick@mac.com> * refactor: use literal types for build_frontend * refactor(tests): build_mode -> build_frontend_env * Update test/test_before_build.py Co-authored-by: Joe Rickerby <joerick@mac.com>
This commit is contained in:
co-authored by
Joe Rickerby
parent
9e1369e07d
commit
515e9be2c4
+78
-28
@@ -12,13 +12,15 @@ from typing import Any, Dict, List, NamedTuple, Optional, Sequence, Set, Tuple,
|
||||
from .architecture import Architecture
|
||||
from .environment import ParsedEnvironment
|
||||
from .logger import log
|
||||
from .typing import Literal, PathOrStr
|
||||
from .typing import Literal, PathOrStr, assert_never
|
||||
from .util import (
|
||||
BuildFrontend,
|
||||
BuildOptions,
|
||||
BuildSelector,
|
||||
NonPlatformWheelError,
|
||||
download,
|
||||
get_build_verbosity_extra_flags,
|
||||
get_pip_version,
|
||||
install_certifi_script,
|
||||
prepare_command,
|
||||
read_python_configs,
|
||||
@@ -178,7 +180,9 @@ def setup_python(
|
||||
python_configuration: PythonConfiguration,
|
||||
dependency_constraint_flags: Sequence[PathOrStr],
|
||||
environment: ParsedEnvironment,
|
||||
build_frontend: BuildFrontend,
|
||||
) -> Dict[str, str]:
|
||||
|
||||
implementation_id = python_configuration.identifier.split("-")[0]
|
||||
log.step(f"Installing Python {implementation_id}...")
|
||||
|
||||
@@ -308,18 +312,33 @@ def setup_python(
|
||||
env.setdefault("SDKROOT", arm64_compatible_sdks[0])
|
||||
|
||||
log.step("Installing build tools...")
|
||||
call(
|
||||
[
|
||||
"pip",
|
||||
"install",
|
||||
"--upgrade",
|
||||
"setuptools",
|
||||
"wheel",
|
||||
"delocate",
|
||||
*dependency_constraint_flags,
|
||||
],
|
||||
env=env,
|
||||
)
|
||||
if build_frontend == "pip":
|
||||
call(
|
||||
[
|
||||
"pip",
|
||||
"install",
|
||||
"--upgrade",
|
||||
"setuptools",
|
||||
"wheel",
|
||||
"delocate",
|
||||
*dependency_constraint_flags,
|
||||
],
|
||||
env=env,
|
||||
)
|
||||
elif build_frontend == "build":
|
||||
call(
|
||||
[
|
||||
"pip",
|
||||
"install",
|
||||
"--upgrade",
|
||||
"delocate",
|
||||
"build[virtualenv]",
|
||||
*dependency_constraint_flags,
|
||||
],
|
||||
env=env,
|
||||
)
|
||||
else:
|
||||
assert_never(build_frontend)
|
||||
|
||||
return env
|
||||
|
||||
@@ -356,7 +375,12 @@ def build(options: BuildOptions) -> None:
|
||||
options.dependency_constraints.get_for_python_version(config.version),
|
||||
]
|
||||
|
||||
env = setup_python(config, dependency_constraint_flags, options.environment)
|
||||
env = setup_python(
|
||||
config,
|
||||
dependency_constraint_flags,
|
||||
options.environment,
|
||||
options.build_frontend,
|
||||
)
|
||||
|
||||
if options.before_build:
|
||||
log.step("Running before_build...")
|
||||
@@ -370,20 +394,46 @@ def build(options: BuildOptions) -> None:
|
||||
shutil.rmtree(built_wheel_dir)
|
||||
built_wheel_dir.mkdir(parents=True)
|
||||
|
||||
# Path.resolve() is needed. Without it pip wheel may try to fetch package from pypi.org
|
||||
# see https://github.com/pypa/cibuildwheel/pull/369
|
||||
call(
|
||||
[
|
||||
"pip",
|
||||
"wheel",
|
||||
options.package_dir.resolve(),
|
||||
"--wheel-dir",
|
||||
built_wheel_dir,
|
||||
"--no-deps",
|
||||
*get_build_verbosity_extra_flags(options.build_verbosity),
|
||||
],
|
||||
env=env,
|
||||
)
|
||||
verbosity_flags = get_build_verbosity_extra_flags(options.build_verbosity)
|
||||
|
||||
if options.build_frontend == "pip":
|
||||
# Path.resolve() is needed. Without it pip wheel may try to fetch package from pypi.org
|
||||
# see https://github.com/pypa/cibuildwheel/pull/369
|
||||
call(
|
||||
[
|
||||
"python",
|
||||
"-m",
|
||||
"pip",
|
||||
"wheel",
|
||||
options.package_dir.resolve(),
|
||||
f"--wheel-dir={built_wheel_dir}",
|
||||
"--no-deps",
|
||||
*verbosity_flags,
|
||||
],
|
||||
env=env,
|
||||
)
|
||||
elif options.build_frontend == "build":
|
||||
config_setting = " ".join(verbosity_flags)
|
||||
build_env = env.copy()
|
||||
if options.dependency_constraints:
|
||||
build_env["PIP_CONSTRAINT"] = str(
|
||||
options.dependency_constraints.get_for_python_version(config.version)
|
||||
)
|
||||
build_env["VIRTUALENV_PIP"] = get_pip_version(env)
|
||||
call(
|
||||
[
|
||||
"python",
|
||||
"-m",
|
||||
"build",
|
||||
options.package_dir,
|
||||
"--wheel",
|
||||
f"--outdir={built_wheel_dir}",
|
||||
f"--config-setting={config_setting}",
|
||||
],
|
||||
env=build_env,
|
||||
)
|
||||
else:
|
||||
assert_never(options.build_frontend)
|
||||
|
||||
built_wheel = next(built_wheel_dir.glob("*.whl"))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user