Skip to content

Commit 1f6589b

Browse files
authored
Upgrade to CPython 3.15.0b1. (#3172)
1 parent 5a49f30 commit 1f6589b

6 files changed

Lines changed: 59 additions & 50 deletions

File tree

docker/base/install_pythons.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ DEADSNAKES_VERSIONS=(
1717
"3.11 {dev,venv,distutils}=3.11.15"
1818
"3.13 {dev,venv}=3.13.13"
1919
"3.14 {dev,venv}=3.14.4"
20-
"3.15 {dev,venv}=3.15.0~a8"
2120
)
2221

2322
add-apt-repository --yes --ppa deadsnakes
@@ -37,6 +36,7 @@ PYENV_VERSIONS=(
3736
3.5.10
3837
3.6.15
3938
3.12.13
39+
3.15.0b1
4040
pypy2.7-7.3.22
4141
pypy3.5-7.0.0
4242
pypy3.6-7.3.3

pyproject.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,6 @@ test = [
185185
"pytest-xdist",
186186
"python-dateutil",
187187
"subprocess32",
188-
189-
{include-group = "devpi-server"},
190188
]
191189
vendor = [
192190
{include-group = "dev-cmd"},

tests/integration/scie/test_issue_2740.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import json
77
import subprocess
8+
import uuid
89
from textwrap import dedent
910

1011
import pytest
@@ -39,7 +40,7 @@ def test_use_pex_scie_as_interpreter(
3940
pex = tmpdir.join("pex")
4041
run_pex_command(args=[pex_wheel, "--scie", "eager", "--scie-only", "-o", pex]).assert_success()
4142

42-
app = tmpdir.join("test")
43+
app = tmpdir.join("test-{uuid}".format(uuid=uuid.uuid4().hex))
4344
pex_root = tmpdir.join("pex_root")
4445

4546
set_pex_root = tmpdir.join("set_pex_root.py")

tests/integration/test_integration.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,28 +1350,41 @@ def build_and_execute_pex_with_warnings(*extra_build_args, **extra_runtime_env):
13501350
return cast(bytes, stderr)
13511351

13521352

1353+
EXPECTED_WARNINGS = (
1354+
b"The following distributions need `pkg_resources` to load some legacy namespace packages and "
1355+
b"may fail to work properly:",
1356+
b"The `pkg_resources` package was loaded from a pex vendored version when "
1357+
b"declaring namespace packages defined by:",
1358+
)
1359+
1360+
1361+
def contains_expected_warnings(data):
1362+
# type: (bytes) -> bool
1363+
return any(expected_warning in data for expected_warning in EXPECTED_WARNINGS)
1364+
1365+
13531366
def test_emit_warnings_default():
13541367
# type: () -> None
13551368
stderr = build_and_execute_pex_with_warnings()
1356-
assert stderr
1369+
assert contains_expected_warnings(stderr)
13571370

13581371

13591372
def test_no_emit_warnings_2():
13601373
# type: () -> None
13611374
stderr = build_and_execute_pex_with_warnings("--no-emit-warnings")
1362-
assert not stderr, stderr
1375+
assert not contains_expected_warnings(stderr)
13631376

13641377

13651378
def test_no_emit_warnings_emit_env_override():
13661379
# type: () -> None
13671380
stderr = build_and_execute_pex_with_warnings("--no-emit-warnings", PEX_EMIT_WARNINGS="true")
1368-
assert stderr
1381+
assert contains_expected_warnings(stderr)
13691382

13701383

13711384
def test_no_emit_warnings_verbose_override():
13721385
# type: () -> None
13731386
stderr = build_and_execute_pex_with_warnings("--no-emit-warnings", PEX_VERBOSE="1")
1374-
assert stderr
1387+
assert contains_expected_warnings(stderr)
13751388

13761389

13771390
def test_trusted_host_handling():

tests/resolve/test_pex_repository_resolver.py

Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,17 @@
1212
from pex.dist_metadata import DistributionType, Requirement
1313
from pex.interpreter import PythonInterpreter
1414
from pex.pep_427 import InstallableType
15-
from pex.pex_builder import PEXBuilder
1615
from pex.pex_info import PexInfo
1716
from pex.platforms import Platform
1817
from pex.requirements import parse_requirement_string, parse_requirement_strings
1918
from pex.resolve import abbreviated_platforms
20-
from pex.resolve.configured_resolver import ConfiguredResolver
2119
from pex.resolve.pex_repository_resolver import resolve_from_pex
22-
from pex.resolve.resolver_configuration import PipConfiguration
2320
from pex.resolve.resolvers import ResolveResult, Unsatisfiable
24-
from pex.resolver import resolve
2521
from pex.sysconfig import SysPlatform
2622
from pex.targets import Targets
27-
from pex.typing import TYPE_CHECKING, cast
28-
from testing import IS_LINUX, PY27, PY310, ensure_python_interpreter
23+
from pex.typing import TYPE_CHECKING
24+
from testing import IS_LINUX, run_pex_command
25+
from testing.pytest_utils.tmp import Tempdir
2926

3027
if TYPE_CHECKING:
3128
from typing import DefaultDict, Iterable, Optional, Set
@@ -34,6 +31,7 @@
3431

3532

3633
def create_pex_repository(
34+
tmpdir, # type: Tempdir
3735
interpreters=None, # type: Optional[Iterable[PythonInterpreter]]
3836
platforms=None, # type: Optional[Iterable[Platform]]
3937
requirements=None, # type: Optional[Iterable[ParsedRequirement]]
@@ -42,24 +40,36 @@ def create_pex_repository(
4240
result_type=InstallableType.INSTALLED_WHEEL_CHROOT, # type: InstallableType.Value
4341
):
4442
# type: (...) -> str
45-
pex_builder = PEXBuilder()
46-
pex_builder.info.deps_are_wheel_files = result_type is InstallableType.WHEEL_FILE
47-
for resolved_dist in resolve(
48-
targets=Targets(
49-
interpreters=tuple(interpreters) if interpreters else (),
50-
platforms=tuple(platforms) if platforms else (),
51-
),
52-
requirements=requirements,
53-
requirement_files=requirement_files,
54-
constraint_files=constraint_files,
55-
resolver=ConfiguredResolver(PipConfiguration()),
56-
result_type=result_type,
57-
).distributions:
58-
pex_builder.add_distribution(resolved_dist.distribution)
59-
for direct_req in resolved_dist.direct_requirements:
60-
pex_builder.add_requirement(direct_req)
61-
pex_builder.freeze()
62-
return os.path.realpath(cast(str, pex_builder.path()))
43+
pex_repository = tmpdir.join("repository.pex")
44+
args = [
45+
"--pip-version",
46+
"latest-compatible",
47+
"--resolver-version",
48+
"pip-2020-resolver",
49+
"--layout",
50+
"loose",
51+
"-o",
52+
pex_repository,
53+
]
54+
python = None # type: Optional[str]
55+
for interpreter in interpreters or ():
56+
args.append("--python")
57+
args.append(interpreter.binary)
58+
python = interpreter.binary
59+
for platform in platforms or ():
60+
args.append("--abbreviated-platform")
61+
args.append(str(platform))
62+
args.extend(str(req) for req in requirements or ())
63+
for requirement_file in requirement_files or ():
64+
args.append("-r")
65+
args.append(requirement_file)
66+
for constraint_file in constraint_files or ():
67+
args.append("--constraints")
68+
args.append(constraint_file)
69+
if result_type == InstallableType.WHEEL_FILE:
70+
args.append("--no-pre-install-wheels")
71+
run_pex_command(args=args, python=python).assert_success()
72+
return pex_repository
6373

6474

6575
def create_constraints_file(*requirements):
@@ -71,31 +81,19 @@ def create_constraints_file(*requirements):
7181
return constraints_file
7282

7383

74-
@pytest.fixture(scope="module")
75-
def py27():
76-
# type: () -> PythonInterpreter
77-
return PythonInterpreter.from_binary(ensure_python_interpreter(PY27))
78-
79-
80-
@pytest.fixture(scope="module")
81-
def py310():
82-
# type: () -> PythonInterpreter
83-
return PythonInterpreter.from_binary(ensure_python_interpreter(PY310))
84-
85-
86-
@pytest.fixture(scope="module")
84+
@pytest.fixture
8785
def macosx():
8886
# type: () -> Platform
8987
return abbreviated_platforms.create("macosx-10.13-x86_64-cp-36-m")
9088

9189

92-
@pytest.fixture(scope="module")
90+
@pytest.fixture
9391
def linux():
9492
# type: () -> Platform
9593
return abbreviated_platforms.create("linux-x86_64-cp-36-m", manylinux="manylinux2014")
9694

9795

98-
@pytest.fixture(scope="module")
96+
@pytest.fixture
9997
def foreign_platform(
10098
macosx, # type: Platform
10199
linux, # type: Platform
@@ -105,13 +103,13 @@ def foreign_platform(
105103

106104

107105
@pytest.fixture(
108-
scope="module",
109106
params=[
110107
pytest.param(installable_type, id=installable_type.value)
111108
for installable_type in InstallableType.values()
112109
],
113110
)
114111
def pex_repository(
112+
tmpdir, # type: Tempdir
115113
py27, # type: PythonInterpreter
116114
py310, # type: PythonInterpreter
117115
foreign_platform, # type: Platform
@@ -138,6 +136,7 @@ def pex_repository(
138136
)
139137

140138
return create_pex_repository(
139+
tmpdir,
141140
interpreters=[py27, py310],
142141
platforms=[foreign_platform],
143142
requirements=[parse_requirement_string("requests[security,socks]==2.25.1")],

uv.lock

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)