script for diff-checking added
This commit is contained in:
+89
@@ -0,0 +1,89 @@
|
||||
from pathlib import Path
|
||||
|
||||
ALIASES = {
|
||||
"bs4": "beautifulsoup4",
|
||||
"python3-discogs-client": "discogs-client",
|
||||
"typing_extensions": "typing-extensions",
|
||||
}
|
||||
|
||||
ALLOWLIST = {
|
||||
"httpx-socks",
|
||||
"pysocks",
|
||||
"socksio",
|
||||
}
|
||||
|
||||
|
||||
def normalize(pkg: str) -> str:
|
||||
pkg = pkg.strip().lower().replace("_", "-")
|
||||
return ALIASES.get(pkg, pkg)
|
||||
|
||||
|
||||
def clean_line(line: str):
|
||||
line = line.strip()
|
||||
if not line:
|
||||
return None
|
||||
if line.startswith("#"):
|
||||
return None
|
||||
if " #" in line:
|
||||
line = line.split(" #", 1)[0].strip()
|
||||
return line
|
||||
|
||||
|
||||
def parse_with_versions(data: str):
|
||||
result = {}
|
||||
for raw in data.splitlines():
|
||||
line = clean_line(raw)
|
||||
if not line:
|
||||
continue
|
||||
name, *version = line.split("==")
|
||||
name = normalize(name)
|
||||
result[name] = version[0] if version else None
|
||||
return result
|
||||
|
||||
|
||||
def parse_simple(data: str):
|
||||
result = set()
|
||||
for raw in data.splitlines():
|
||||
line = clean_line(raw)
|
||||
if not line:
|
||||
continue
|
||||
result.add(normalize(line))
|
||||
return result
|
||||
|
||||
|
||||
base_path = Path(__file__).parent
|
||||
|
||||
req_new_path = base_path / "requirements.txt"
|
||||
req_old_path = base_path / "requirements-old.txt"
|
||||
|
||||
if not req_new_path.exists():
|
||||
raise FileNotFoundError("requirements.txt не найден")
|
||||
|
||||
if not req_old_path.exists():
|
||||
raise FileNotFoundError("requirements-old.txt не найден")
|
||||
|
||||
list1 = req_new_path.read_text(encoding="utf-8")
|
||||
list2 = req_old_path.read_text(encoding="utf-8")
|
||||
|
||||
a = parse_with_versions(list1)
|
||||
b = parse_simple(list2)
|
||||
|
||||
a_names = set(a.keys())
|
||||
|
||||
only_in_list2 = sorted(b - a_names)
|
||||
only_in_list2_clean = [pkg for pkg in only_in_list2 if pkg not in ALLOWLIST]
|
||||
ignored = [pkg for pkg in only_in_list2 if pkg in ALLOWLIST]
|
||||
|
||||
print("Только в list1:")
|
||||
print(sorted(a_names - b))
|
||||
|
||||
print("\nТолько в list2 (кандидаты на удаление):")
|
||||
print(only_in_list2_clean)
|
||||
|
||||
print("\nИгнорируемые (allowlist):")
|
||||
print(sorted(ignored))
|
||||
|
||||
print("\nПодозрительные дубли (алиасы):")
|
||||
for k, v in ALIASES.items():
|
||||
if k in a_names:
|
||||
print(f"{k} -> {v}")
|
||||
@@ -0,0 +1,53 @@
|
||||
# et-xmlfile
|
||||
# exceptiongroup
|
||||
# markdown-it-py
|
||||
# mdurl
|
||||
# munkres
|
||||
# musicbrainzngs
|
||||
# openpyxl
|
||||
# pygments
|
||||
# rich
|
||||
# sniffio
|
||||
anyio
|
||||
beautifulsoup4
|
||||
beetcamp
|
||||
beets
|
||||
certifi
|
||||
charset-normalizer
|
||||
colorama
|
||||
confuse
|
||||
discogs-client
|
||||
filetype
|
||||
h11
|
||||
httpcore
|
||||
httpx
|
||||
httpx-socks
|
||||
idna
|
||||
jellyfish
|
||||
langdetect
|
||||
lap
|
||||
llvmlite
|
||||
mediafile
|
||||
mutagen
|
||||
numba
|
||||
numpy
|
||||
oauthlib
|
||||
packaging
|
||||
pillow
|
||||
platformdirs
|
||||
pycountry
|
||||
pylast
|
||||
pyrate-limiter
|
||||
pysocks
|
||||
python-dateutil
|
||||
pyyaml
|
||||
requests
|
||||
requests-ratelimiter
|
||||
scipy
|
||||
# setuptools
|
||||
six
|
||||
socksio
|
||||
soupsieve
|
||||
typing-extensions
|
||||
unidecode
|
||||
urllib3
|
||||
@@ -0,0 +1,39 @@
|
||||
anyio==4.13.0
|
||||
beautifulsoup4==4.14.3
|
||||
beetcamp==0.24.3
|
||||
beets==2.10.0
|
||||
certifi==2026.4.22
|
||||
charset-normalizer==3.4.7
|
||||
colorama==0.4.6
|
||||
confuse==2.2.0
|
||||
filetype==1.2.0
|
||||
h11==0.16.0
|
||||
httpcore==1.0.9
|
||||
httpx==0.28.1
|
||||
idna==3.13
|
||||
jellyfish==1.2.1
|
||||
langdetect==1.0.9
|
||||
lap==0.5.13
|
||||
llvmlite==0.47.0
|
||||
mediafile==0.17.0
|
||||
mutagen==1.47.0
|
||||
numba==0.65.1
|
||||
numpy==2.4.4
|
||||
oauthlib==3.3.1
|
||||
packaging==26.2
|
||||
pillow==12.2.0
|
||||
platformdirs==4.9.6
|
||||
pycountry==26.2.16
|
||||
pylast==7.0.2
|
||||
pyrate-limiter==4.1.0
|
||||
python-dateutil==2.9.0.post0
|
||||
python3-discogs-client==2.8
|
||||
PyYAML==6.0.3
|
||||
requests==2.33.1
|
||||
requests-ratelimiter==0.10.0
|
||||
scipy==1.17.1
|
||||
six==1.17.0
|
||||
soupsieve==2.8.3
|
||||
typing_extensions==4.15.0
|
||||
Unidecode==1.4.0
|
||||
urllib3==2.6.3
|
||||
Reference in New Issue
Block a user