Skip to content

Commit e53e988

Browse files
committed
maint: generate requirements.txt from pyproject.toml
1 parent d5855ae commit e53e988

File tree

5 files changed

+56
-1
lines changed

5 files changed

+56
-1
lines changed

.circleci/config.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ jobs:
1313
- checkout:
1414
path: /tmp/src/templateflow
1515

16+
- run:
17+
name: Generate requirements.txt
18+
command: |
19+
python /tmp/src/templateflow/.maint/update_requirements.py
20+
1621
- restore_cache:
1722
keys:
1823
- deps-v10-{{ checksum "/tmp/src/templateflow/requirements.txt"}}-{{ epoch }}

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# setuptools_scm
22
templateflow/_version.py
33

4+
# circleci hash checking
5+
requirements.txt
6+
min-requirements.txt
7+
48
# Byte-compiled / optimized / DLL files
59
__pycache__/
610
*.py[cod]
File renamed without changes.

.maint/update_requirements.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/usr/bin/env python3
2+
from copy import copy
3+
from pathlib import Path
4+
from packaging.requirements import Requirement, SpecifierSet
5+
6+
try:
7+
from tomllib import loads # Python +3.11
8+
except ImportError:
9+
from pip._vendor.tomli import loads
10+
11+
repo_root = Path(__file__).parent.parent
12+
pyproject = repo_root / "pyproject.toml"
13+
reqs = repo_root / "requirements.txt"
14+
min_reqs = repo_root / "min-requirements.txt"
15+
16+
requirements = [
17+
Requirement(req)
18+
for req in loads(pyproject.read_text())["project"]["dependencies"]
19+
]
20+
21+
script_name = Path(__file__).relative_to(repo_root)
22+
23+
24+
def to_min(req):
25+
if req.specifier:
26+
req = copy(req)
27+
try:
28+
min_spec = [spec for spec in req.specifier if spec.operator in (">=", "~=")][0]
29+
except IndexError:
30+
return req
31+
min_spec._spec = ("==",) + min_spec._spec[1:]
32+
req.specifier = SpecifierSet(str(min_spec))
33+
return req
34+
35+
36+
lines = [f"# Auto-generated by {script_name}", ""]
37+
38+
# Write requirements
39+
lines[1:-1] = [str(req) for req in requirements]
40+
reqs.write_text("\n".join(lines))
41+
42+
# Write minimum requirements
43+
lines[1:-1] = [str(to_min(req)) for req in requirements]
44+
min_reqs.write_text("\n".join(lines))

MANIFEST.in

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
recursive-exclude templateflow/tests *
22
recursive-exclude templateflow/conf/tests *
33
recursive-exclude docs/ *
4+
45
recursive-exclude .circleci/ *
56
recursive-exclude .github/ *
7+
recursive-exclude .maint/ *
68

7-
exclude .gitignore .gitattributes .git_archival.txt .travis.yml .zenodo.json codecov.yml update_changes.sh
9+
exclude .gitignore .gitattributes .git_archival.txt .travis.yml .zenodo.json codecov.yml

0 commit comments

Comments
 (0)