Allow the user to set PIP_CONSTRAINT and it affect build-system.requires
This commit is contained in:
@@ -409,7 +409,9 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
config.version
|
config.version
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
build_env["PIP_CONSTRAINT"] = constraint_path.as_uri()
|
build_env["PIP_CONSTRAINT"] = (
|
||||||
|
constraint_path.as_uri() + " " + build_env.get("PIP_CONSTRAINT", "")
|
||||||
|
)
|
||||||
build_env["VIRTUALENV_PIP"] = get_pip_version(env)
|
build_env["VIRTUALENV_PIP"] = get_pip_version(env)
|
||||||
call(
|
call(
|
||||||
"python",
|
"python",
|
||||||
|
|||||||
@@ -455,7 +455,9 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
tmp_file.write_bytes(constraints_path.read_bytes())
|
tmp_file.write_bytes(constraints_path.read_bytes())
|
||||||
constraints_path = tmp_file
|
constraints_path = tmp_file
|
||||||
|
|
||||||
build_env["PIP_CONSTRAINT"] = str(constraints_path)
|
build_env["PIP_CONSTRAINT"] = (
|
||||||
|
str(constraints_path) + " " + build_env.get("PIP_CONSTRAINT", "")
|
||||||
|
)
|
||||||
build_env["VIRTUALENV_PIP"] = get_pip_version(env)
|
build_env["VIRTUALENV_PIP"] = get_pip_version(env)
|
||||||
call(
|
call(
|
||||||
"python",
|
"python",
|
||||||
|
|||||||
+1
-1
@@ -674,7 +674,7 @@ Platform-specific environment variables are also available:<br/>
|
|||||||
cibuildwheel always defines the environment variable `CIBUILDWHEEL=1`. This can be useful for [building wheels with optional extensions](faq.md#building-packages-with-optional-c-extensions).
|
cibuildwheel always defines the environment variable `CIBUILDWHEEL=1`. This can be useful for [building wheels with optional extensions](faq.md#building-packages-with-optional-c-extensions).
|
||||||
|
|
||||||
!!! note
|
!!! note
|
||||||
To do its work, cibuildwheel internally sets the options `PIP_CONSTRAINT`, `VIRTUALENV_PIP`, `DIST_EXTRA_CONFIG`, `SETUPTOOLS_EXT_SUFFIX`, `PIP_DISABLE_PIP_VERSION_CHECK`, `PIP_ROOT_USER_ACTION`. Your assignments to these options might be overridden.
|
To do its work, cibuildwheel internally sets the options `VIRTUALENV_PIP`, `DIST_EXTRA_CONFIG`, `SETUPTOOLS_EXT_SUFFIX`, `PIP_DISABLE_PIP_VERSION_CHECK`, `PIP_ROOT_USER_ACTION`. Your assignments to these options might be overridden.
|
||||||
|
|
||||||
### `CIBW_ENVIRONMENT_PASS_LINUX` {: #environment-pass}
|
### `CIBW_ENVIRONMENT_PASS_LINUX` {: #environment-pass}
|
||||||
> Set environment variables on the host to pass-through to the container.
|
> Set environment variables on the host to pass-through to the container.
|
||||||
|
|||||||
@@ -93,3 +93,40 @@ def test_overridden_path(tmp_path, capfd):
|
|||||||
assert len(os.listdir(output_dir)) == 0
|
assert len(os.listdir(output_dir)) == 0
|
||||||
captured = capfd.readouterr()
|
captured = capfd.readouterr()
|
||||||
assert "python available on PATH doesn't match our installed instance" in captured.err
|
assert "python available on PATH doesn't match our installed instance" in captured.err
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("build_frontend", ["pip", "build"])
|
||||||
|
def test_overridden_pip_constraint(tmp_path, build_frontend):
|
||||||
|
project_dir = tmp_path / "project"
|
||||||
|
|
||||||
|
project = test_projects.new_c_project(
|
||||||
|
setup_py_add=textwrap.dedent(
|
||||||
|
"""
|
||||||
|
import pytz
|
||||||
|
assert pytz.__version__ == "2022.4"
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
project.files["pyproject.toml"] = textwrap.dedent(
|
||||||
|
"""
|
||||||
|
[build-system]
|
||||||
|
requires = ["setuptools", "pytz"]
|
||||||
|
build-backend = "setuptools.build_meta"
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
project.generate(project_dir)
|
||||||
|
|
||||||
|
constraints_file = tmp_path / "constraints.txt"
|
||||||
|
constraints_file.write_text("pytz==2022.4")
|
||||||
|
|
||||||
|
actual_wheels = utils.cibuildwheel_run(
|
||||||
|
project_dir,
|
||||||
|
add_env={
|
||||||
|
"CIBW_BUILD": "cp312-*",
|
||||||
|
"CIBW_BUILD_FRONTEND": build_frontend,
|
||||||
|
"CIBW_ENVIRONMENT": f"PIP_CONSTRAINT={constraints_file}",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
expected_wheels = [w for w in utils.expected_wheels("spam", "0.1.0") if "cp312" in w]
|
||||||
|
assert set(actual_wheels) == set(expected_wheels)
|
||||||
|
|||||||
Reference in New Issue
Block a user