Viewing file: metadata_legacy.py (1.96 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.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 from pip._internal.utils.typing import MYPY_CHECK_RUNNING
if MYPY_CHECK_RUNNING: from pip._internal.build_env import BuildEnvironment
logger = logging.getLogger(__name__)
def _find_egg_info(directory): # type: (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( "No .egg-info directory found in {}".format(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, # type: BuildEnvironment setup_py_path, # type: str source_dir, # type: str isolated, # type: bool details, # type: str ): # type: (...) -> 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: call_subprocess( args, cwd=source_dir, command_desc='python setup.py egg_info', )
# Return the .egg-info directory. return _find_egg_info(egg_info_dir)
|