haystack

Форк
0
/
pyproject_to_requirements.py 
47 строк · 1.2 Кб
1
import argparse
2
import re
3
import sys
4
from pathlib import Path
5

6
import toml
7

8
matcher = re.compile(r"farm-haystack\[(.+)\]")
9
parser = argparse.ArgumentParser(
10
    prog="pyproject_to_requirements.py", description="Convert pyproject.toml to requirements.txt"
11
)
12
parser.add_argument("pyproject_path")
13
parser.add_argument("--extra", default="")
14

15

16
def resolve(target: str, extras: dict, results: set):
17
    if target not in extras:
18
        results.add(target)
19
        return
20

21
    for t in extras[target]:
22
        m = matcher.match(t)
23
        if m:
24
            for i in m.group(1).split(","):
25
                resolve(i, extras, results)
26
        else:
27
            resolve(t, extras, results)
28

29

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"])
34

35
    if extra:
36
        extras = content["project"]["optional-dependencies"]
37
        resolve(extra, extras, deps)
38

39
    sys.stdout.write("\n".join(sorted(deps)))
40
    sys.stdout.write("\n")
41

42

43
if __name__ == "__main__":
44
    args = parser.parse_args()
45
    pyproject_path = Path(args.pyproject_path).absolute()
46

47
    main(pyproject_path, args.extra)
48

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.