4
from pathlib import Path
8
matcher = re.compile(r"farm-haystack\[(.+)\]")
9
parser = argparse.ArgumentParser(
10
prog="pyproject_to_requirements.py", description="Convert pyproject.toml to requirements.txt"
12
parser.add_argument("pyproject_path")
13
parser.add_argument("--extra", default="")
16
def resolve(target: str, extras: dict, results: set):
17
if target not in extras:
21
for t in extras[target]:
24
for i in m.group(1).split(","):
25
resolve(i, extras, results)
27
resolve(t, extras, results)
30
def main(pyproject_path: Path, extra: str = ""):
31
content = toml.load(pyproject_path)
32
# basic set of dependencies
33
deps = set(content["project"]["dependencies"])
36
extras = content["project"]["optional-dependencies"]
37
resolve(extra, extras, deps)
39
sys.stdout.write("\n".join(sorted(deps)))
40
sys.stdout.write("\n")
43
if __name__ == "__main__":
44
args = parser.parse_args()
45
pyproject_path = Path(args.pyproject_path).absolute()
47
main(pyproject_path, args.extra)