Spaces:
Build error
Build error
| import os | |
| import sys | |
| import pkg_resources | |
| import argparse | |
| # Parse command line arguments | |
| parser = argparse.ArgumentParser(description="Validate that requirements are satisfied.") | |
| parser.add_argument('-r', '--requirements', type=str, default='requirements.txt', help="Path to the requirements file.") | |
| args = parser.parse_args() | |
| print("Validating that requirements are satisfied.") | |
| # Load the requirements from the specified requirements file | |
| with open(args.requirements) as f: | |
| requirements = f.readlines() | |
| # Check each requirement against the installed packages | |
| missing_requirements = [] | |
| wrong_version_requirements = [] | |
| for requirement in requirements: | |
| requirement = requirement.strip() | |
| if requirement == ".": | |
| # Skip the current requirement if it is a dot (.) | |
| continue | |
| try: | |
| pkg_resources.require(requirement) | |
| except pkg_resources.DistributionNotFound: | |
| # Check if the requirement contains a VCS URL | |
| if "@" in requirement: | |
| # If it does, split the requirement into two parts: the package name and the VCS URL | |
| package_name, vcs_url = requirement.split("@", 1) | |
| # Use pip to install the package from the VCS URL | |
| os.system(f"pip install -e {vcs_url}") | |
| # Try to require the package again | |
| try: | |
| pkg_resources.require(package_name) | |
| except pkg_resources.DistributionNotFound: | |
| missing_requirements.append(requirement) | |
| else: | |
| missing_requirements.append(requirement) | |
| except pkg_resources.VersionConflict as e: | |
| wrong_version_requirements.append((requirement, str(e.req), e.dist.version)) | |
| # If there are any missing or wrong version requirements, print an error message and exit with a non-zero exit code | |
| if missing_requirements or wrong_version_requirements: | |
| if missing_requirements: | |
| print("Error: The following packages are missing:") | |
| for requirement in missing_requirements: | |
| print(f" - {requirement}") | |
| if wrong_version_requirements: | |
| print("Error: The following packages have the wrong version:") | |
| for requirement, expected_version, actual_version in wrong_version_requirements: | |
| print(f" - {requirement} (expected version {expected_version}, found version {actual_version})") | |
| upgrade_script = "upgrade.ps1" if os.name == "nt" else "upgrade.sh" | |
| print(f"\nRun \033[33m{upgrade_script}\033[0m or \033[33mpip install -U -r {args.requirements}\033[0m to resolve the missing requirements listed above...") | |
| sys.exit(1) | |
| # All requirements satisfied | |
| print("All requirements satisfied.") | |
| sys.exit(0) | |