Spaces:
Build error
Build error
import os | |
import platform | |
class Requirements: | |
'''Manage requirements for the project''' | |
def __init__(self): | |
self.package_path = os.path.dirname(os.path.realpath(__file__)) | |
self.requirements_path = os.path.join(self.package_path, '..', '..', 'requirements.txt') | |
def get_list_requirements(self): | |
'''Get the list of requirements packages from requirements.txt''' | |
with open(self.requirements_path) as f: | |
requirements = f.read().splitlines() | |
# remove comments and empty lines | |
requirements = [line for line in requirements if not line.startswith('#')] | |
requirements = [line for line in requirements if line.strip()] | |
# extract package name from protocol | |
requirements = [line.split('/')[-1] for line in requirements if not line.startswith('git+')] | |
requirements = [line.split('/')[-1] for line in requirements if not line.startswith('http')] | |
requirements = [line.split('/')[-1] for line in requirements if not line.startswith('https')] | |
requirements = [line.split('/')[-1] for line in requirements if not line.startswith('ssh')] | |
requirements = [line.split('/')[-1] for line in requirements if not line.startswith('git')] | |
# sort alphabetically | |
requirements.sort() | |
return requirements | |
def get_os_name(self): | |
'''Get the name of the operating system''' | |
return platform.system() | |
def get_os_version(self): | |
'''Get the version of the operating system''' | |
return platform.version() | |
def get_python_version(self): | |
'''Get the version of Python installed''' | |
return platform.python_version() | |
def is_all_requirements_installed(self): | |
'''Check if all requirements are installed''' | |
requirements = self.get_list_requirements() | |
for requirement in requirements: | |
if not self.is_requirement_installed(requirement): | |
return False | |
return True | |
def is_requirement_installed(self, package_name): | |
'''Check if a package is installed''' | |
import importlib | |
try: | |
importlib.import_module(package_name) | |
return True | |
except ImportError: | |
return False | |
def get_version(self, package_name): | |
'''Get the version of a package''' | |
import pkg_resources | |
try: | |
return pkg_resources.get_distribution(package_name).version | |
except: | |
return None | |
def get_all_requirements_versions(self): | |
'''Get the versions of all requirements''' | |
requirements = self.get_list_requirements() | |
versions = {} | |
for requirement in requirements: | |
versions[requirement] = self.get_version(requirement) | |
return versions | |
def get_all_requirements_not_installed(self): | |
'''Get the list of all requirements not installed''' | |
requirements = self.get_list_requirements() | |
not_installed = {} | |
for requirement in requirements: | |
# if version is None then the package is not installed | |
if self.get_version(requirement) is None: | |
not_installed[requirement] = self.get_version(requirement) | |
return not_installed | |
if __name__ == '__main__': | |
'''Display information about the system and requirements''' | |
requirements_manager = Requirements() | |
# Skipping for now, because it assumes package have the same name as the python import itself, which is not true most sometimes. | |
# if not requirements_manager.is_all_requirements_installed(): | |
# print("Error : Some requirements are missing") | |
# print("Please install all requirements from requirements.txt") | |
# print("You can install them by running the following command:") | |
# print("pip install -r requirements.txt") | |
print(f"System information:") | |
print(f"OS name : {requirements_manager.get_os_name()}") | |
print(f"OS version : {requirements_manager.get_os_version()}") | |
print(f"Python version : {requirements_manager.get_python_version()}") | |
# list all requirements and their versions | |
print("List of all requirements and their versions:") | |
all_req_versions = requirements_manager.get_all_requirements_versions() | |
for req_name, req_version in all_req_versions.items(): | |
print(f"{req_name}=={req_version}") | |
print("List of all requirements not installed:") | |
all_req_not_installed = requirements_manager.get_all_requirements_not_installed() | |
for req_name, req_version in all_req_not_installed.items(): | |
print(f"{req_name}=={req_version}") | |