up
This commit is contained in:
@@ -1,22 +1,16 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import glob
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
from functools import partial
|
||||
|
||||
from pkg_resources import Distribution
|
||||
|
||||
from . import _reqs
|
||||
from ._reqs import _StrOrIter
|
||||
from .warnings import SetuptoolsDeprecationWarning
|
||||
from .wheel import Wheel
|
||||
|
||||
import warnings
|
||||
from distutils import log
|
||||
from distutils.errors import DistutilsError
|
||||
|
||||
import pkg_resources
|
||||
from setuptools.wheel import Wheel
|
||||
from ._deprecation_warning import SetuptoolsDeprecationWarning
|
||||
|
||||
|
||||
def _fixup_find_links(find_links):
|
||||
"""Ensure find-links option end-up being a list of strings."""
|
||||
@@ -26,34 +20,20 @@ def _fixup_find_links(find_links):
|
||||
return find_links
|
||||
|
||||
|
||||
def fetch_build_egg(dist, req):
|
||||
def fetch_build_egg(dist, req): # noqa: C901 # is too complex (16) # FIXME
|
||||
"""Fetch an egg needed for building.
|
||||
|
||||
Use pip/wheel to fetch/build a wheel."""
|
||||
_DeprecatedInstaller.emit()
|
||||
_warn_wheel_not_available(dist)
|
||||
return _fetch_build_egg_no_warn(dist, req)
|
||||
|
||||
|
||||
def _fetch_build_eggs(dist, requires: _StrOrIter) -> list[Distribution]:
|
||||
import pkg_resources # Delay import to avoid unnecessary side-effects
|
||||
|
||||
_DeprecatedInstaller.emit(stacklevel=3)
|
||||
_warn_wheel_not_available(dist)
|
||||
|
||||
resolved_dists = pkg_resources.working_set.resolve(
|
||||
_reqs.parse(requires, pkg_resources.Requirement), # required for compatibility
|
||||
installer=partial(_fetch_build_egg_no_warn, dist), # avoid warning twice
|
||||
replace_conflicting=True,
|
||||
warnings.warn(
|
||||
"setuptools.installer is deprecated. Requirements should "
|
||||
"be satisfied by a PEP 517 installer.",
|
||||
SetuptoolsDeprecationWarning,
|
||||
)
|
||||
for dist in resolved_dists:
|
||||
pkg_resources.working_set.add(dist, replace=True)
|
||||
return resolved_dists
|
||||
|
||||
|
||||
def _fetch_build_egg_no_warn(dist, req): # noqa: C901 # is too complex (16) # FIXME
|
||||
import pkg_resources # Delay import to avoid unnecessary side-effects
|
||||
|
||||
# Warn if wheel is not available
|
||||
try:
|
||||
pkg_resources.get_distribution('wheel')
|
||||
except pkg_resources.DistributionNotFound:
|
||||
dist.announce('WARNING: The wheel package is not available.', log.WARN)
|
||||
# Ignore environment markers; if supplied, it is required.
|
||||
req = strip_marker(req)
|
||||
# Take easy_install options into account, but do not override relevant
|
||||
@@ -61,10 +41,8 @@ def _fetch_build_egg_no_warn(dist, req): # noqa: C901 # is too complex (16) #
|
||||
# take precedence.
|
||||
opts = dist.get_option_dict('easy_install')
|
||||
if 'allow_hosts' in opts:
|
||||
raise DistutilsError(
|
||||
'the `allow-hosts` option is not supported '
|
||||
'when using pip to install requirements.'
|
||||
)
|
||||
raise DistutilsError('the `allow-hosts` option is not supported '
|
||||
'when using pip to install requirements.')
|
||||
quiet = 'PIP_QUIET' not in os.environ and 'PIP_VERBOSE' not in os.environ
|
||||
if 'PIP_INDEX_URL' in os.environ:
|
||||
index_url = None
|
||||
@@ -73,7 +51,8 @@ def _fetch_build_egg_no_warn(dist, req): # noqa: C901 # is too complex (16) #
|
||||
else:
|
||||
index_url = None
|
||||
find_links = (
|
||||
_fixup_find_links(opts['find_links'][1])[:] if 'find_links' in opts else []
|
||||
_fixup_find_links(opts['find_links'][1])[:] if 'find_links' in opts
|
||||
else []
|
||||
)
|
||||
if dist.dependency_links:
|
||||
find_links.extend(dist.dependency_links)
|
||||
@@ -84,14 +63,10 @@ def _fetch_build_egg_no_warn(dist, req): # noqa: C901 # is too complex (16) #
|
||||
return egg_dist
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
cmd = [
|
||||
sys.executable,
|
||||
'-m',
|
||||
'pip',
|
||||
sys.executable, '-m', 'pip',
|
||||
'--disable-pip-version-check',
|
||||
'wheel',
|
||||
'--no-deps',
|
||||
'-w',
|
||||
tmpdir,
|
||||
'wheel', '--no-deps',
|
||||
'-w', tmpdir,
|
||||
]
|
||||
if quiet:
|
||||
cmd.append('--quiet')
|
||||
@@ -111,11 +86,10 @@ def _fetch_build_egg_no_warn(dist, req): # noqa: C901 # is too complex (16) #
|
||||
dist_location = os.path.join(eggs_dir, wheel.egg_name())
|
||||
wheel.install_as_egg(dist_location)
|
||||
dist_metadata = pkg_resources.PathMetadata(
|
||||
dist_location, os.path.join(dist_location, 'EGG-INFO')
|
||||
)
|
||||
return pkg_resources.Distribution.from_filename(
|
||||
dist_location, metadata=dist_metadata
|
||||
)
|
||||
dist_location, os.path.join(dist_location, 'EGG-INFO'))
|
||||
dist = pkg_resources.Distribution.from_filename(
|
||||
dist_location, metadata=dist_metadata)
|
||||
return dist
|
||||
|
||||
|
||||
def strip_marker(req):
|
||||
@@ -124,27 +98,7 @@ def strip_marker(req):
|
||||
calling pip with something like `babel; extra == "i18n"`, which
|
||||
would always be ignored.
|
||||
"""
|
||||
import pkg_resources # Delay import to avoid unnecessary side-effects
|
||||
|
||||
# create a copy to avoid mutating the input
|
||||
req = pkg_resources.Requirement.parse(str(req))
|
||||
req.marker = None
|
||||
return req
|
||||
|
||||
|
||||
def _warn_wheel_not_available(dist):
|
||||
import pkg_resources # Delay import to avoid unnecessary side-effects
|
||||
|
||||
try:
|
||||
pkg_resources.get_distribution('wheel')
|
||||
except pkg_resources.DistributionNotFound:
|
||||
dist.announce('WARNING: The wheel package is not available.', log.WARN)
|
||||
|
||||
|
||||
class _DeprecatedInstaller(SetuptoolsDeprecationWarning):
|
||||
_SUMMARY = "setuptools.installer and fetch_build_eggs are deprecated."
|
||||
_DETAILS = """
|
||||
Requirements should be satisfied by a PEP 517 installer.
|
||||
If you are using pip, you can try `pip install --use-pep517`.
|
||||
"""
|
||||
# _DUE_DATE not decided yet
|
||||
|
||||
Reference in New Issue
Block a user