import logging from optparse import Values from typing import Generator, Iterable, Iterator, List, NamedTuple, Optional
from pip._vendor.packaging.utils import canonicalize_name
from pip._internal.cli.base_command import Command from pip._internal.cli.status_codes import ERROR, SUCCESS from pip._internal.metadata import BaseDistribution, get_default_environment from pip._internal.utils.misc import write_output
logger = logging.getLogger(__name__)
class ShowCommand(Command): """
Show information about one or more installed packages.
The output isin RFC-compliant mail header format. """
def add_options(self) -> None:
self.cmd_opts.add_option( "-f", "--files",
dest="files",
action="store_true",
default=False,
help="Show the full list of installed files for each package.",
)
self.parser.insert_option_group(0, self.cmd_opts)
def run(self, options: Values, args: List[str]) -> int: ifnot args:
logger.warning("ERROR: Please provide a package name or names.") return ERROR
query = args
def search_packages_info(query: List[str]) -> Generator[_PackageInfo, None, None]: """
Gather details from installed distributions. Print distribution name,
version, location, and installed files. Installed files requires a
pip generated 'installed-files.txt'in the distributions '.egg-info'
directory. """
env = get_default_environment()
installed = {dist.canonical_name: dist for dist in env.iter_all_distributions()}
query_names = [canonicalize_name(name) for name in query]
missing = sorted(
[name for name, pkg in zip(query, query_names) if pkg notin installed]
) if missing:
logger.warning("Package(s) not found: %s", ", ".join(missing))
def _get_requiring_packages(current_dist: BaseDistribution) -> Iterator[str]: return (
dist.metadata["Name"] or"UNKNOWN" for dist in installed.values() if current_dist.canonical_name in {canonicalize_name(d.name) for d in dist.iter_dependencies()}
)
for query_name in query_names: try:
dist = installed[query_name] except KeyError: continue
requires = sorted((req.name for req in dist.iter_dependencies()), key=str.lower)
required_by = sorted(_get_requiring_packages(dist), key=str.lower)
def print_results(
distributions: Iterable[_PackageInfo],
list_files: bool,
verbose: bool,
) -> bool: """
Print the information from installed distributions found. """
results_printed = False for i, dist in enumerate(distributions):
results_printed = True if i > 0:
write_output("---")
if verbose:
write_output("Metadata-Version: %s", dist.metadata_version)
write_output("Installer: %s", dist.installer)
write_output("Classifiers:") for classifier in dist.classifiers:
write_output(" %s", classifier)
write_output("Entry-points:") for entry in dist.entry_points:
write_output(" %s", entry.strip())
write_output("Project-URLs:") for project_url in dist.project_urls:
write_output(" %s", project_url) if list_files:
write_output("Files:") if dist.files isNone:
write_output("Cannot locate RECORD or installed-files.txt") else: for line in dist.files:
write_output(" %s", line.strip()) return results_printed
Messung V0.5
¤ Dauer der Verarbeitung: 0.0 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.