|
4 | 4 | #
|
5 | 5 | import glob
|
6 | 6 | import os.path
|
| 7 | +import re |
7 | 8 | from collections.abc import Sequence
|
8 | 9 | from pprint import pprint
|
9 | 10 | from typing import Union
|
|
15 | 16 | REQUIREMENT_FILES_ALL += [REQUIREMENT_ROOT]
|
16 | 17 |
|
17 | 18 |
|
18 |
| -def prune_pkgs_in_requirements( |
| 19 | +def prune_packages_in_requirements( |
19 | 20 | packages: Union[str, Sequence[str]], req_files: Union[str, Sequence[str]] = REQUIREMENT_FILES_ALL
|
20 | 21 | ) -> None:
|
21 | 22 | """Remove some packages from given requirement files."""
|
@@ -49,9 +50,35 @@ def _replace_min(fname: str) -> None:
|
49 | 50 | fw.write(req)
|
50 | 51 |
|
51 | 52 |
|
52 |
| -def replace_oldest_ver(req_files: Union[str, Sequence[str]] = REQUIREMENT_FILES_ALL) -> None: |
| 53 | +def replace_oldest_version(req_files: Union[str, Sequence[str]] = REQUIREMENT_FILES_ALL) -> None: |
53 | 54 | """Replace the min package version by fixed one."""
|
54 | 55 | if isinstance(req_files, str):
|
55 | 56 | req_files = [req_files]
|
56 | 57 | for fname in req_files:
|
57 | 58 | _replace_min(fname)
|
| 59 | + |
| 60 | + |
| 61 | +def _replace_package_name(requirements: list[str], old_package: str, new_package: str) -> list[str]: |
| 62 | + """Replace one package by another with same version in given requirement file. |
| 63 | +
|
| 64 | + >>> _replace_package_name(["torch>=1.0 # comment", "torchvision>=0.2", "torchtext <0.3"], "torch", "pytorch") |
| 65 | + ['pytorch>=1.0 # comment', 'torchvision>=0.2', 'torchtext <0.3'] |
| 66 | +
|
| 67 | + """ |
| 68 | + for i, req in enumerate(requirements): |
| 69 | + requirements[i] = re.sub(r"^" + re.escape(old_package) + r"(?=[ <=>#]|$)", new_package, req) |
| 70 | + return requirements |
| 71 | + |
| 72 | + |
| 73 | +def replace_package_in_requirements( |
| 74 | + old_package: str, new_package: str, req_files: Union[str, Sequence[str]] = REQUIREMENT_FILES_ALL |
| 75 | +) -> None: |
| 76 | + """Replace one package by another with same version in given requirement files.""" |
| 77 | + if isinstance(req_files, str): |
| 78 | + req_files = [req_files] |
| 79 | + for fname in req_files: |
| 80 | + with open(fname) as fopen: |
| 81 | + reqs = fopen.readlines() |
| 82 | + reqs = _replace_package_name(reqs, old_package, new_package) |
| 83 | + with open(fname, "w") as fw: |
| 84 | + fw.writelines(reqs) |
0 commit comments