Skip to content

Commit 493ce5b

Browse files
authored
Hello dynamic dependencies, my old friends (#195)
* Remove constraint line from requirement files * Add dynamic links to requirement files * Use contraint file when installing dependencies
1 parent 5b7ab1d commit 493ce5b

File tree

6 files changed

+29
-23
lines changed

6 files changed

+29
-23
lines changed

noxfile.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,12 @@ def dev(session: nox.Session) -> None:
5353
session.run("python", "-m", "venv", VENV_PATH, "--upgrade-deps")
5454

5555
python = partial(session.run, f"{venv_path}/python", "-m")
56+
contraint = ("--constraint", f"{REQUIREMENTS_PATH}/constraints.txt")
5657

57-
requirement_files = get_requirement_files()
58-
for requirement_file in requirement_files:
59-
python("pip", "install", "-r", requirement_file, external=True)
60-
python("pip", "install", "--editable", ".", external=True)
58+
for requirement_file in get_requirement_files():
59+
python("pip", "install", "-r", requirement_file, *contraint, external=True)
60+
61+
python("pip", "install", "--editable", ".", *contraint, external=True)
6162

6263
python("pip", "install", "pre-commit", external=True)
6364
session.run(f"{venv_path}/pre-commit", "install", external=True)
@@ -71,9 +72,9 @@ def run_tests_with_coverage(session: nox.Session) -> None:
7172
"""Run pytest with coverage, outputs console report and json."""
7273
print_standard_logs(session)
7374

74-
session.install(".")
75-
session.install("-r", f"{REQUIREMENTS_PATH}/requirements.txt")
76-
session.install("-r", f"{REQUIREMENTS_PATH}/requirements-test.txt")
75+
contraint = ("--constraint", f"{REQUIREMENTS_PATH}/constraints.txt")
76+
77+
session.install(".[test]", *contraint)
7778

7879
coverage = partial(session.run, "python", "-m", "coverage")
7980

@@ -92,7 +93,9 @@ def coverage_combine(session: nox.Session) -> None:
9293
"""CI: Combine parallel-mode coverage files and produce reports."""
9394
print_standard_logs(session)
9495

95-
session.install("-r", f"{REQUIREMENTS_PATH}/requirements-test.txt")
96+
contraint = ("--constraint", f"{REQUIREMENTS_PATH}/constraints.txt")
97+
98+
session.install("-r", f"{REQUIREMENTS_PATH}/requirements-test.txt", *contraint)
9699

97100
coverage = partial(session.run, "python", "-m", "coverage")
98101
coverage("combine")
@@ -105,9 +108,8 @@ def run_linters_and_formatters(session: nox.Session) -> None:
105108
"""Run code formatters, linters, and type checking against all files."""
106109
print_standard_logs(session)
107110

108-
session.install(".")
109-
session.install("-r", f"{REQUIREMENTS_PATH}/requirements.txt")
110-
session.install("-r", f"{REQUIREMENTS_PATH}/requirements-dev.txt")
111+
contraint = ("--constraint", f"{REQUIREMENTS_PATH}/constraints.txt")
112+
session.install(".[dev]", *contraint)
111113

112114
python = partial(session.run, "python", "-m")
113115

@@ -143,16 +145,15 @@ def update_deps(session: nox.Session) -> None:
143145
"""Process requirement*.txt files, updating only additions/removals."""
144146
print_standard_logs(session)
145147

146-
requirement_files = get_requirement_files()
147-
148148
session.install("pip-tools")
149149
session.run(
150150
"pip-compile",
151+
"--strip-extras",
151152
"--no-annotate",
152153
"--no-emit-index-url",
153154
"--output-file",
154155
f"{REQUIREMENTS_PATH}/constraints.txt",
155-
*requirement_files,
156+
*get_requirement_files(),
156157
)
157158

158159

@@ -161,17 +162,16 @@ def upgrade_deps(session: nox.Session) -> None:
161162
"""Process requirement*.txt files and upgrade all libraries as possible."""
162163
print_standard_logs(session)
163164

164-
requirement_files = get_requirement_files()
165-
166165
session.install("pip-tools")
167166
session.run(
168167
"pip-compile",
168+
"--strip-extras",
169169
"--no-annotate",
170170
"--no-emit-index-url",
171171
"--upgrade",
172172
"--output-file",
173173
f"{REQUIREMENTS_PATH}/constraints.txt",
174-
*requirement_files,
174+
*get_requirement_files(),
175175
)
176176

177177

pyproject.toml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[build-system]
2-
requires = ["setuptools>=64"]
2+
requires = [ "setuptools>=64" ]
33
build-backend = "setuptools.build_meta"
44

55
[project]
@@ -20,6 +20,14 @@ classifiers = [
2020
"Programming Language :: Python :: 3 :: Only",
2121
"Programming Language :: Python :: Implementation :: CPython",
2222
]
23+
dynamic = [ "dependencies", "optional-dependencies" ]
24+
25+
[tool.setuptools.dynamic.dependencies]
26+
file = [ "requirements/requirements.txt" ]
27+
28+
[tool.setuptools.dynamic.optional-dependencies]
29+
dev = { file = [ "requirements/requirements-dev.txt" ] }
30+
test = { file = [ "requirements/requirements-test.txt" ] }
2331

2432
[project.urls]
2533
homepage = "https://github.com/[ORG NAME]/[REPO NAME]"

requirements/constraints.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# This file is autogenerated by pip-compile with Python 3.12
33
# by the following command:
44
#
5-
# pip-compile --no-annotate --no-emit-index-url --output-file=./requirements/constraints.txt requirements/requirements-dev.txt requirements/requirements-test.txt requirements/requirements.txt
5+
# pip-compile --no-annotate --no-emit-index-url --output-file=./requirements/constraints.txt --strip-extras requirements/requirements-dev.txt requirements/requirements-test.txt requirements/requirements.txt
66
#
77
black==25.1.0
88
certifi==2025.4.26
@@ -16,7 +16,7 @@ idna==3.10
1616
iniconfig==2.1.0
1717
isort==6.0.1
1818
mccabe==0.7.0
19-
mypy==1.15.0
19+
mypy==1.16.0
2020
mypy-extensions==1.1.0
2121
packaging==25.0
2222
pathspec==0.12.1
@@ -27,5 +27,6 @@ pyflakes==3.3.2
2727
pytest==8.3.5
2828
pytest-randomly==3.16.0
2929
requests==2.32.3
30+
types-requests==2.32.0.20250515
3031
typing-extensions==4.13.2
3132
urllib3==2.4.0

requirements/requirements-dev.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
# Development Requirements - linting, formatting, etc.
2-
--constraint ./constraints.txt
32

43
# Linting
54
flake8

requirements/requirements-test.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
# Testing Requirements
2-
--constraint ./constraints.txt
32

43
pytest
54
pytest-randomly

requirements/requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
# Core Dependencies
2-
--constraint ./constraints.txt
32

43
requests

0 commit comments

Comments
 (0)