def _get_package_summary(path: Path, *, package: str = None, new_install: bool = False) -> str: venv = Venv(path) python_path = venv.python_path.resolve() if package is None: package = path.name metadata = venv.get_venv_metadata_for_package(package) if metadata.package_version is None: not_installed = red("is not installed") return f" package {bold(package)} {not_installed} in the venv {str(path)}" apps = metadata.apps + metadata.apps_of_dependencies exposed_app_paths = _get_exposed_app_paths_for_package( venv.bin_path, apps, constants.LOCAL_BIN_DIR) exposed_binary_names = sorted(p.name for p in exposed_app_paths) unavailable_binary_names = sorted( set(metadata.apps) - set(exposed_binary_names)) return _get_list_output( metadata.python_version, python_path, metadata.package_version, package, new_install, exposed_binary_names, unavailable_binary_names, )
def get_package_summary( path: Path, *, package: str = None, new_install: bool = False, include_injected: bool = False, suffix: str = "", ) -> str: venv = Venv(path) python_path = venv.python_path.resolve() if package is None: package = path.name if not python_path.is_file(): return f" package {red(bold(package))} has invalid interpreter {str(python_path)}" if not venv.package_metadata: return ( f" package {red(bold(package))} has missing internal pipx metadata.\n" f" It was likely installed using a pipx version before 0.15.0.0.\n" f" Please uninstall and install this package, or reinstall-all to fix." ) package_metadata = venv.package_metadata[package] if package_metadata.package_version is None: not_installed = red("is not installed") return f" package {bold(package)} {not_installed} in the venv {str(path)}" apps = package_metadata.apps + package_metadata.apps_of_dependencies exposed_app_paths = _get_exposed_app_paths_for_package( venv.bin_path, apps, constants.LOCAL_BIN_DIR ) exposed_binary_names = sorted(p.name for p in exposed_app_paths) unavailable_binary_names = sorted( set(add_suffix(name, suffix) for name in package_metadata.apps) - set(exposed_binary_names) ) # The following is to satisfy mypy that python_version is str and not # Optional[str] python_version = ( venv.pipx_metadata.python_version if venv.pipx_metadata.python_version is not None else "" ) return _get_list_output( python_version, python_path, package_metadata.package_version, package, new_install, exposed_binary_names, unavailable_binary_names, venv.pipx_metadata.injected_packages.keys() if include_injected else None, )
def get_package_summary( path: Path, *, package: str = None, new_install: bool = False ) -> str: venv = Venv(path) python_path = venv.python_path.resolve() if package is None: package = path.name if not python_path.is_file(): return f" package {red(bold(package))} has invalid interpreter {str(python_path)}" package_metadata = venv.package_metadata[package] if package_metadata.package_version is None: not_installed = red("is not installed") return f" package {bold(package)} {not_installed} in the venv {str(path)}" apps = package_metadata.apps + package_metadata.apps_of_dependencies exposed_app_paths = _get_exposed_app_paths_for_package( venv.bin_path, apps, constants.LOCAL_BIN_DIR ) exposed_binary_names = sorted(p.name for p in exposed_app_paths) unavailable_binary_names = sorted( set(package_metadata.apps) - set(exposed_binary_names) ) # The following is to satisfy mypy that python_version is str and not # Optional[str] python_version = ( venv.pipx_metadata.python_version if venv.pipx_metadata.python_version is not None else "" ) return _get_list_output( python_version, python_path, package_metadata.package_version, package, new_install, exposed_binary_names, unavailable_binary_names, )