pip/tests/functional/test_wheel.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

390 lines
12 KiB
Python
Raw Normal View History

2013-05-28 23:58:08 +02:00
"""'pip wheel' tests"""
2012-10-17 00:57:10 +02:00
import os
Add SHA256 hash of .whl as info output (#5908) * Add SHA256 hash of .whl as info output Currently I'm trying to debug some issues with what appear to be corrupt wheels. It would be very useful to see what pip thought the state of things was as it wrote the wheel output; if a final corrupt distributed file is then different to what pip has saved in its build logs, you know the problem is somewhere after pip but before distribution. Currently we get a log of the initial creation, then the stamp when it gets moved in the final output location, e.g.: creating '/tmp/pip-wheel-71CpBe/foo-1.2.3-py2.py3-none-any.whl ... Stored in directory: /opt/wheel/workspace A lot happens in between this, so my suggestion is we add the final output file and it's hash before the "Stored in directory:", e.g. you now see: Building wheels for collected packages: simple Running setup.py bdist_wheel for simple: started Running setup.py bdist_wheel for simple: finished with status 'done' Finished: simple-3.0-py3-none-any.whl sha256=39005a57a6327972575072af82e11d0817439fe6a069381f6f2a123a8c0bf1cf Stored in directory: /tmp/pytest-of-iwienand/pytest-18/test_pip_wheel_success0/workspace/scratch Successfully built simple Despite the hash being fairly important for things like --require-hashes, AFAICS the final hash is not put in the logs at all currently, so I think this is generically helpful. * Reword wheel hash details output This rewords the output to be more like the form of the preceding messages. Additionally the size is added, since we have calculated it anyway. The output will now look like: Collecting simple==3.0 Building wheels for collected packages: simple Building wheel for simple (setup.py): started Building wheel for simple (setup.py): finished with status 'done' Created wheel for simple: filename=simple-3.0-py3-none-any.whl size=1138 sha256=2a980a802c9d38a24d29aded2dc2df2b080e58370902e5fdf950090ff67aec10 Stored in directory: /tmp/pytest-of-iwienand/pytest-0/test_pip_wheel_success0/workspace/scratch Successfully built simple
2019-06-26 11:44:43 +02:00
import re
import sys
from pathlib import Path
2012-10-17 01:39:56 +02:00
2017-05-16 12:16:30 +02:00
import pytest
from pip._internal.cli.status_codes import ERROR
2023-06-05 16:06:11 +02:00
from tests.lib import (
PipTestEnvironment,
TestData,
2023-09-21 02:00:34 +02:00
pyversion,
2023-06-05 16:06:11 +02:00
)
2013-05-28 23:58:08 +02:00
def add_files_to_dist_directory(folder: Path) -> None:
(folder / "dist").mkdir(parents=True)
(folder / "dist" / "a_name-0.0.1.tar.gz").write_text("hello")
# Not adding a wheel file since that confuses setuptools' backend.
# (folder / 'dist' / 'a_name-0.0.1-py2.py3-none-any.whl').write_text(
# "hello"
# )
def test_wheel_exit_status_code_when_no_requirements(
script: PipTestEnvironment,
) -> None:
"""
Test wheel exit status code when no requirements specified
"""
result = script.pip("wheel", expect_error=True)
assert "You must give at least one requirement to wheel" in result.stderr
assert result.returncode == ERROR
def test_wheel_exit_status_code_when_blank_requirements_file(
script: PipTestEnvironment,
) -> None:
"""
Test wheel exit status code when blank requirements file specified
"""
script.scratch_path.joinpath("blank.txt").write_text("\n")
script.pip("wheel", "-r", "blank.txt")
def test_pip_wheel_success(script: PipTestEnvironment, data: TestData) -> None:
2013-05-28 23:58:08 +02:00
"""
Test 'pip wheel' success.
"""
result = script.pip(
"wheel",
"--no-index",
"-f",
data.find_links,
"simple==3.0",
)
wheel_file_name = f"simple-3.0-py{pyversion[0]}-none-any.whl"
wheel_file_path = script.scratch / wheel_file_name
Add SHA256 hash of .whl as info output (#5908) * Add SHA256 hash of .whl as info output Currently I'm trying to debug some issues with what appear to be corrupt wheels. It would be very useful to see what pip thought the state of things was as it wrote the wheel output; if a final corrupt distributed file is then different to what pip has saved in its build logs, you know the problem is somewhere after pip but before distribution. Currently we get a log of the initial creation, then the stamp when it gets moved in the final output location, e.g.: creating '/tmp/pip-wheel-71CpBe/foo-1.2.3-py2.py3-none-any.whl ... Stored in directory: /opt/wheel/workspace A lot happens in between this, so my suggestion is we add the final output file and it's hash before the "Stored in directory:", e.g. you now see: Building wheels for collected packages: simple Running setup.py bdist_wheel for simple: started Running setup.py bdist_wheel for simple: finished with status 'done' Finished: simple-3.0-py3-none-any.whl sha256=39005a57a6327972575072af82e11d0817439fe6a069381f6f2a123a8c0bf1cf Stored in directory: /tmp/pytest-of-iwienand/pytest-18/test_pip_wheel_success0/workspace/scratch Successfully built simple Despite the hash being fairly important for things like --require-hashes, AFAICS the final hash is not put in the logs at all currently, so I think this is generically helpful. * Reword wheel hash details output This rewords the output to be more like the form of the preceding messages. Additionally the size is added, since we have calculated it anyway. The output will now look like: Collecting simple==3.0 Building wheels for collected packages: simple Building wheel for simple (setup.py): started Building wheel for simple (setup.py): finished with status 'done' Created wheel for simple: filename=simple-3.0-py3-none-any.whl size=1138 sha256=2a980a802c9d38a24d29aded2dc2df2b080e58370902e5fdf950090ff67aec10 Stored in directory: /tmp/pytest-of-iwienand/pytest-0/test_pip_wheel_success0/workspace/scratch Successfully built simple
2019-06-26 11:44:43 +02:00
assert re.search(
r"Created wheel for simple: "
2023-11-07 10:14:56 +01:00
rf"filename={re.escape(wheel_file_name)} size=\d+ sha256=[A-Fa-f0-9]{{64}}",
result.stdout,
2021-08-13 15:23:45 +02:00
)
Add SHA256 hash of .whl as info output (#5908) * Add SHA256 hash of .whl as info output Currently I'm trying to debug some issues with what appear to be corrupt wheels. It would be very useful to see what pip thought the state of things was as it wrote the wheel output; if a final corrupt distributed file is then different to what pip has saved in its build logs, you know the problem is somewhere after pip but before distribution. Currently we get a log of the initial creation, then the stamp when it gets moved in the final output location, e.g.: creating '/tmp/pip-wheel-71CpBe/foo-1.2.3-py2.py3-none-any.whl ... Stored in directory: /opt/wheel/workspace A lot happens in between this, so my suggestion is we add the final output file and it's hash before the "Stored in directory:", e.g. you now see: Building wheels for collected packages: simple Running setup.py bdist_wheel for simple: started Running setup.py bdist_wheel for simple: finished with status 'done' Finished: simple-3.0-py3-none-any.whl sha256=39005a57a6327972575072af82e11d0817439fe6a069381f6f2a123a8c0bf1cf Stored in directory: /tmp/pytest-of-iwienand/pytest-18/test_pip_wheel_success0/workspace/scratch Successfully built simple Despite the hash being fairly important for things like --require-hashes, AFAICS the final hash is not put in the logs at all currently, so I think this is generically helpful. * Reword wheel hash details output This rewords the output to be more like the form of the preceding messages. Additionally the size is added, since we have calculated it anyway. The output will now look like: Collecting simple==3.0 Building wheels for collected packages: simple Building wheel for simple (setup.py): started Building wheel for simple (setup.py): finished with status 'done' Created wheel for simple: filename=simple-3.0-py3-none-any.whl size=1138 sha256=2a980a802c9d38a24d29aded2dc2df2b080e58370902e5fdf950090ff67aec10 Stored in directory: /tmp/pytest-of-iwienand/pytest-0/test_pip_wheel_success0/workspace/scratch Successfully built simple
2019-06-26 11:44:43 +02:00
assert re.search(r"^\s+Stored in directory: ", result.stdout, re.M)
result.did_create(wheel_file_path)
2013-05-28 23:58:08 +02:00
assert "Successfully built simple" in result.stdout, result.stdout
def test_pip_wheel_build_cache(script: PipTestEnvironment, data: TestData) -> None:
"""
Test 'pip wheel' builds and caches.
"""
result = script.pip(
"wheel",
"--no-index",
"-f",
data.find_links,
"simple==3.0",
)
wheel_file_name = f"simple-3.0-py{pyversion[0]}-none-any.whl"
wheel_file_path = script.scratch / wheel_file_name
result.did_create(wheel_file_path)
assert "Successfully built simple" in result.stdout, result.stdout
# remove target file
(script.scratch_path / wheel_file_name).unlink()
# pip wheel again and test that no build occurs since
# we get the wheel from cache
result = script.pip(
"wheel",
"--no-index",
"-f",
data.find_links,
"simple==3.0",
)
result.did_create(wheel_file_path)
assert "Successfully built simple" not in result.stdout, result.stdout
def test_basic_pip_wheel_downloads_wheels(
script: PipTestEnvironment, data: TestData
) -> None:
"""
Test 'pip wheel' downloads wheels
"""
result = script.pip(
"wheel",
"--no-index",
"-f",
data.find_links,
"simple.dist",
)
wheel_file_name = "simple.dist-0.1-py2.py3-none-any.whl"
wheel_file_path = script.scratch / wheel_file_name
result.did_create(wheel_file_path)
assert "Saved" in result.stdout, result.stdout
def test_pip_wheel_build_relative_cachedir(
script: PipTestEnvironment, data: TestData
) -> None:
"""
Test 'pip wheel' builds and caches with a non-absolute cache directory.
"""
result = script.pip(
"wheel",
"--no-index",
"-f",
data.find_links,
"--cache-dir",
"./cache",
"simple==3.0",
)
assert result.returncode == 0
def test_pip_wheel_builds_when_no_binary_set(
script: PipTestEnvironment, data: TestData
) -> None:
data.packages.joinpath("simple-3.0-py2.py3-none-any.whl").touch()
# Check that the wheel package is ignored
res = script.pip(
"wheel",
"--no-index",
"--no-binary",
":all:",
"-f",
data.find_links,
"simple==3.0",
)
assert "Building wheel for simple" in str(res), str(res)
@pytest.mark.skipif("sys.platform == 'win32'")
def test_pip_wheel_readonly_cache(
script: PipTestEnvironment, data: TestData, tmpdir: Path
) -> None:
cache_dir = tmpdir / "cache"
cache_dir.mkdir()
os.chmod(cache_dir, 0o400) # read-only cache
# Check that the wheel package is ignored
res = script.pip(
"wheel",
"--no-index",
"-f",
data.find_links,
"--cache-dir",
cache_dir,
"simple==3.0",
allow_stderr_warning=True,
)
assert res.returncode == 0
assert "The cache has been disabled." in str(res), str(res)
def test_pip_wheel_builds_editable_deps(
script: PipTestEnvironment, data: TestData
) -> None:
"""
Test 'pip wheel' finds and builds dependencies of editables
"""
editable_path = os.path.join(data.src, "requires_simple")
result = script.pip(
"wheel", "--no-index", "-f", data.find_links, "-e", editable_path
)
wheel_file_name = f"simple-1.0-py{pyversion[0]}-none-any.whl"
wheel_file_path = script.scratch / wheel_file_name
result.did_create(wheel_file_path)
def test_pip_wheel_builds_editable(script: PipTestEnvironment, data: TestData) -> None:
"""
Test 'pip wheel' builds an editable package
"""
editable_path = os.path.join(data.src, "simplewheel-1.0")
result = script.pip(
"wheel", "--no-index", "-f", data.find_links, "-e", editable_path
)
wheel_file_name = f"simplewheel-1.0-py{pyversion[0]}-none-any.whl"
wheel_file_path = script.scratch / wheel_file_name
result.did_create(wheel_file_path)
@pytest.mark.network
def test_pip_wheel_git_editable_keeps_clone(
script: PipTestEnvironment, tmpdir: Path
) -> None:
"""
Test that `pip wheel -e giturl` preserves a git clone in src.
"""
script.pip(
"wheel",
"--no-deps",
"-e",
"git+https://github.com/pypa/pip-test-package#egg=pip-test-package",
"--src",
tmpdir / "src",
"--wheel-dir",
tmpdir,
)
assert (tmpdir / "src" / "pip-test-package").exists()
assert (tmpdir / "src" / "pip-test-package" / ".git").exists()
def test_pip_wheel_builds_editable_does_not_create_zip(
script: PipTestEnvironment, data: TestData, tmpdir: Path
) -> None:
2020-11-12 12:34:37 +01:00
"""
Test 'pip wheel' of editables does not create zip files
(regression test for issue #9122)
"""
wheel_dir = tmpdir / "wheel_dir"
wheel_dir.mkdir()
editable_path = os.path.join(data.src, "simplewheel-1.0")
script.pip("wheel", "--no-deps", "-e", editable_path, "-w", wheel_dir)
wheels = os.listdir(wheel_dir)
assert len(wheels) == 1
assert wheels[0].endswith(".whl")
def test_pip_wheel_fail(script: PipTestEnvironment, data: TestData) -> None:
2013-05-28 23:58:08 +02:00
"""
Test 'pip wheel' failure.
"""
result = script.pip(
"wheel",
"--no-index",
"-f",
data.find_links,
"wheelbroken==0.1",
expect_error=True,
)
wheel_file_name = f"wheelbroken-0.1-py{pyversion[0]}-none-any.whl"
wheel_file_path = script.scratch / wheel_file_name
result.did_not_create(wheel_file_path)
assert "FakeError" in result.stderr, result.stderr
2013-05-28 23:58:08 +02:00
assert "Failed to build wheelbroken" in result.stdout, result.stdout
assert result.returncode != 0
2013-05-28 23:58:08 +02:00
def test_pip_wheel_source_deps(script: PipTestEnvironment, data: TestData) -> None:
2013-06-07 04:11:43 +02:00
"""
Test 'pip wheel' finds and builds source archive dependencies
of wheels
2013-06-07 04:11:43 +02:00
"""
# 'requires_source' is a wheel that depends on the 'source' project
result = script.pip(
"wheel",
"--no-index",
"-f",
data.find_links,
"requires_source",
)
wheel_file_name = f"source-1.0-py{pyversion[0]}-none-any.whl"
wheel_file_path = script.scratch / wheel_file_name
result.did_create(wheel_file_path)
2013-06-07 04:11:43 +02:00
assert "Successfully built source" in result.stdout, result.stdout
def test_wheel_package_with_latin1_setup(
script: PipTestEnvironment, data: TestData
) -> None:
2015-11-26 22:36:47 +01:00
"""Create a wheel from a package with latin-1 encoded setup.py."""
pkg_to_wheel = data.packages.joinpath("SetupPyLatin1")
2015-11-26 22:36:47 +01:00
result = script.pip("wheel", pkg_to_wheel)
assert "Successfully built SetupPyUTF8" in result.stdout
def test_pip_wheel_with_pep518_build_reqs(
script: PipTestEnvironment, data: TestData, common_wheels: Path
) -> None:
result = script.pip(
"wheel",
"--no-index",
"-f",
data.find_links,
"-f",
common_wheels,
"pep518==3.0",
)
wheel_file_name = f"pep518-3.0-py{pyversion[0]}-none-any.whl"
wheel_file_path = script.scratch / wheel_file_name
result.did_create(wheel_file_path)
assert "Successfully built pep518" in result.stdout, result.stdout
assert "Installing build dependencies" in result.stdout, result.stdout
def test_pip_wheel_with_pep518_build_reqs_no_isolation(
script: PipTestEnvironment, data: TestData
) -> None:
script.pip_install_local("simplewheel==2.0")
result = script.pip(
"wheel",
"--no-index",
"-f",
data.find_links,
"--no-build-isolation",
"pep518==3.0",
)
wheel_file_name = f"pep518-3.0-py{pyversion[0]}-none-any.whl"
wheel_file_path = script.scratch / wheel_file_name
result.did_create(wheel_file_path)
assert "Successfully built pep518" in result.stdout, result.stdout
assert "Installing build dependencies" not in result.stdout, result.stdout
def test_pip_wheel_with_user_set_in_config(
script: PipTestEnvironment, data: TestData, common_wheels: Path
) -> None:
config_file = script.scratch_path / "pip.conf"
script.environ["PIP_CONFIG_FILE"] = str(config_file)
config_file.write_text("[install]\nuser = true")
result = script.pip(
"wheel", data.src / "withpyproject", "--no-index", "-f", common_wheels
)
assert "Successfully built withpyproject" in result.stdout, result.stdout
@pytest.mark.skipif(
sys.platform.startswith("win"),
reason="The empty extension module does not work on Win",
)
def test_pip_wheel_ext_module_with_tmpdir_inside(
script: PipTestEnvironment, data: TestData, common_wheels: Path
) -> None:
tmpdir = data.src / "extension/tmp"
tmpdir.mkdir()
script.environ["TMPDIR"] = str(tmpdir)
# To avoid a test dependency on a C compiler, we set the env vars to "noop"
# The .c source is empty anyway
script.environ["CC"] = script.environ["LDSHARED"] = "true"
result = script.pip(
"wheel", data.src / "extension", "--no-index", "-f", common_wheels
)
assert "Successfully built extension" in result.stdout, result.stdout
Mark 3 tests as network tests ________________ test_constraints_local_editable_install_pep518 ________________ ... ----------------------------- Captured stdout call ----------------------------- Script result: python -m pip download setuptools wheel -d /tmp/pytest-of-mockbuild/pytest-0/test_constraints_local_editabl0/data/packages return code: 1 -- stderr: -------------------- Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fba7fdeb160>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/ Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fba7fdeb0b8>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/ Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fba7fdeb4e0>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/ Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fba7fdeb6d8>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/ Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fba7fdeb860>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/ Could not find a version that satisfies the requirement setuptools (from versions: ) No matching distribution found for setuptools _____________ test_pep517_wheels_are_not_confused_with_other_files _____________ ... -- stdout: -------------------- Processing /tmp/pytest-of-mockbuild/pytest-0/test_pep517_wheels_are_not_con0/data/src/withpyproject Installing build dependencies: started Installing build dependencies: finished with status 'error' Complete output from command /tmp/pytest-of-mockbuild/pytest-0/test_pep517_wheels_are_not_con0/workspace/venv/bin/python /builddir/build/BUILDROOT/python-pip-19.0.2-1.fc30.x86_64/usr/lib/python3.7/site-packages/pip install --ignore-installed --no-user --prefix /tmp/pytest-of-mockbuild/pytest-0/test_pep517_wheels_are_not_con0/workspace/tmp/pip-build-env-3un7dqu3/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools wheel: Collecting setuptools Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fb7cf5a8898>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/ Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fb7cf5b9588>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/ Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fb7cf5b9470>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/ Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fb7cf5b9278>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/ Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fb7cf5b9208>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/ Could not find a version that satisfies the requirement setuptools (from versions: ) No matching distribution found for setuptools ________________________ test_upgrade_argparse_shadowed ________________________ ... ----------------------------- Captured stdout call ----------------------------- Script result: python -m pip install argparse==1.3 return code: 1 -- stderr: -------------------- Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7ff07d6db240>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/argparse/ Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7ff07d6db358>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/argparse/ Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7ff07d6db400>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/argparse/ Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7ff07d6db518>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/argparse/ Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7ff07d6c7710>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/argparse/ Could not find a version that satisfies the requirement argparse==1.3 (from versions: ) No matching distribution found for argparse==1.3
2019-02-13 12:18:34 +01:00
@pytest.mark.network
def test_pep517_wheels_are_not_confused_with_other_files(
script: PipTestEnvironment, data: TestData
) -> None:
"""Check correct wheels are copied. (#6196)"""
pkg_to_wheel = data.src / "withpyproject"
add_files_to_dist_directory(pkg_to_wheel)
result = script.pip("wheel", pkg_to_wheel, "-w", script.scratch_path)
assert "Installing build dependencies" in result.stdout, result.stdout
wheel_file_name = f"withpyproject-0.0.1-py{pyversion[0]}-none-any.whl"
wheel_file_path = script.scratch / wheel_file_name
result.did_create(wheel_file_path)
def test_legacy_wheels_are_not_confused_with_other_files(
script: PipTestEnvironment, data: TestData
) -> None:
"""Check correct wheels are copied. (#6196)"""
pkg_to_wheel = data.src / "simplewheel-1.0"
add_files_to_dist_directory(pkg_to_wheel)
result = script.pip("wheel", pkg_to_wheel, "-w", script.scratch_path)
assert "Installing build dependencies" not in result.stdout, result.stdout
wheel_file_name = f"simplewheel-1.0-py{pyversion[0]}-none-any.whl"
wheel_file_path = script.scratch / wheel_file_name
result.did_create(wheel_file_path)