import sys from importlib.metadata import distribution, PackageNotFoundError, version from packaging.requirements import Requirement def main(req_file): with open(req_file) as f: requirements = [line.strip() for line in f if line.strip() and not line.startswith('#')] missing = [] mismatch = [] for req_line in requirements: try: req = Requirement(req_line) pkg_name = req.name spec = req.specifier try: installed_ver = version(pkg_name) if not spec.contains(installed_ver): mismatch.append(f"{pkg_name} (requires {spec}, but {installed_ver} installed)") except PackageNotFoundError: missing.append(f"{pkg_name} (requires {spec if spec else 'any version'})") except Exception as e: print(f"Failed to parse: {req_line} - {e}") if missing: print("Missing packages:") for m in missing: print(f" {m}") if mismatch: print("\nVersion mismatches:") for m in mismatch: print(f" {m}") if not missing and not mismatch: print("All dependencies are correctly installed.") if __name__ == "__main__": if len(sys.argv) != 2: print("Usage: python check_reqs_improved.py requirements.txt") sys.exit(1) main(sys.argv[1])