Source code for harp_apps.dashboard.utils.dependencies
fromimportlibimportmetadata
[docs]defparse_dependencies(dependencies:list[str])->dict[str,str]:"""Transform a list of dependencies into a dictionary of dependencies, with package name as key."""parsed={}fordependencyindependencies:# Skip empty lines or commentsifnotdependencyordependency.startswith("#"):continue# Handle editable packagesifdependency.startswith("-e"):pkg_repo,pkg_name=dependency.rsplit("/",1)pkg_name=pkg_name.split("#egg=")[-1]# Extract package namepkg_version="editable"else:parts=dependency.split("==")iflen(parts)==2:pkg_name,pkg_version=partselse:# Handle packages without a version or with unusual formattingpkg_name,pkg_version=parts[0],"unknown"# Check for duplicatesifpkg_nameinparsed:raiseValueError(f"Duplicate package name {pkg_name} found.")parsed[pkg_name]=pkg_versionreturnparsed
[docs]asyncdefget_python_dependencies()->list[str]:"""Get installed Python packages using importlib.metadata. Returns a list of strings in the format "package==version", compatible with pip freeze output format. This works in all Python environments including pip-less environments like uv. """return[f"{dist.name}=={dist.version}"fordistinmetadata.distributions()]