Viewing file: metadata_legacy.py (1.9 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
"""Metadata generation logic for legacy source distributions. """
import logging import os
from pip._internal.build_env import BuildEnvironment from pip._internal.cli.spinners import open_spinner from pip._internal.exceptions import InstallationError from pip._internal.utils.setuptools_build import make_setuptools_egg_info_args from pip._internal.utils.subprocess import call_subprocess from pip._internal.utils.temp_dir import TempDirectory
logger = logging.getLogger(__name__)
def _find_egg_info(directory: str) -> str: """Find an .egg-info subdirectory in `directory`.""" filenames = [f for f in os.listdir(directory) if f.endswith(".egg-info")]
if not filenames: raise InstallationError(f"No .egg-info directory found in {directory}")
if len(filenames) > 1: raise InstallationError( "More than one .egg-info directory found in {}".format(directory) )
return os.path.join(directory, filenames[0])
def generate_metadata( build_env: BuildEnvironment, setup_py_path: str, source_dir: str, isolated: bool, details: str, ) -> str: """Generate metadata using setup.py-based defacto mechanisms.
Returns the generated metadata directory. """ logger.debug( "Running setup.py (path:%s) egg_info for package %s", setup_py_path, details, )
egg_info_dir = TempDirectory(kind="pip-egg-info", globally_managed=True).path
args = make_setuptools_egg_info_args( setup_py_path, egg_info_dir=egg_info_dir, no_user_config=isolated, )
with build_env: with open_spinner("Preparing metadata (setup.py)") as spinner: call_subprocess( args, cwd=source_dir, command_desc="python setup.py egg_info", spinner=spinner, )
# Return the .egg-info directory. return _find_egg_info(egg_info_dir)
|