-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathupdate_requirements.py
executable file
·90 lines (76 loc) · 2.18 KB
/
update_requirements.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/usr/bin/env python3
import os
import subprocess
import toml
def create_dirs():
"""Create requirements directory if it doesn't exist."""
os.makedirs("requirements", exist_ok=True)
def get_extras():
"""Get list of extras from pyproject.toml."""
with open("pyproject.toml") as f:
pyproject = toml.load(f)
return list(pyproject.get("tool", {}).get("poetry", {}).get("extras", {}).keys())
def export_requirements():
"""Export requirements from Poetry to separate files."""
# Export main dependencies to common.txt
subprocess.run(
[
"poetry",
"export",
"--format",
"requirements.txt",
"--without-hashes",
"--without-urls",
"--only",
"main",
"-o",
"requirements/common.txt",
],
check=True,
)
# Export dev dependencies to dev.txt
subprocess.run(
[
"poetry",
"export",
"--format",
"requirements.txt",
"--without-hashes",
"--without-urls",
"--only",
"dev",
"-o",
"requirements/dev.txt",
],
check=True,
)
# Export each extra to its own file
extras = get_extras()
for extra in extras:
subprocess.run(
[
"poetry",
"export",
"--format",
"requirements.txt",
"--without-hashes",
"--without-urls",
"--extras",
extra,
"-o",
f"requirements/{extra}.txt",
],
check=True,
)
# Create main requirements.txt with reference to common.txt and information about extras
with open("requirements.txt", "w") as f:
f.write("-r requirements/common.txt\n\n")
f.write("# Available extras (install with pip -r requirements/<extra>.txt):\n")
for extra in extras:
f.write(f"# - {extra}\n")
def main():
create_dirs()
export_requirements()
print("Requirements files updated successfully!")
if __name__ == "__main__":
main()