mirror of
https://github.com/kennethreitz/pipenv.git
synced 2026-06-05 22:50:18 +00:00
Show what the new requirementslib changes look like.
This commit is contained in:
+1
-1
@@ -5,7 +5,7 @@ from .models.lockfile import Lockfile
|
||||
from .models.pipfile import Pipfile
|
||||
from .models.requirements import Requirement
|
||||
|
||||
__version__ = "2.0.1"
|
||||
__version__ = "2.0.2.dev0"
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
+2
-4
@@ -3,14 +3,12 @@ import copy
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
import pathlib
|
||||
import sys
|
||||
|
||||
import pipenv.vendor.vistir as vistir
|
||||
from pipenv.patched.pip._vendor.packaging.requirements import Requirement
|
||||
from pipenv.patched.pip._internal.utils.hashes import FAVORITE_HASH
|
||||
from pipenv.patched.pip._internal.vcs.versioncontrol import VcsSupport
|
||||
from pipenv.patched.pip._vendor.cachecontrol.cache import DictCache
|
||||
from pipenv.patched.pip._vendor.packaging.requirements import Requirement
|
||||
from pipenv.vendor.platformdirs import user_cache_dir
|
||||
|
||||
from .utils import as_tuple, get_pinned_version, key_from_req, lookup_table
|
||||
@@ -130,7 +128,7 @@ class HashCache(DictCache):
|
||||
def __init__(self, *args, **kwargs):
|
||||
session = kwargs.pop("session", None)
|
||||
if not session:
|
||||
import pipenv.patched.pip._vendor.requests as requests
|
||||
import requests
|
||||
|
||||
session = requests.session()
|
||||
atexit.register(session.close)
|
||||
|
||||
+25
-40
@@ -1,18 +1,12 @@
|
||||
# -*- coding=utf-8 -*-
|
||||
|
||||
import atexit
|
||||
import contextlib
|
||||
import copy
|
||||
import functools
|
||||
import os
|
||||
from contextlib import ExitStack
|
||||
from json import JSONDecodeError
|
||||
|
||||
import pipenv.vendor.attr as attr
|
||||
import pipenv.patched.pip._vendor.requests as requests
|
||||
from pipenv.patched.pip._vendor.packaging.markers import Marker
|
||||
from pipenv.patched.pip._vendor.packaging.utils import canonicalize_name
|
||||
from pipenv.patched.pip._vendor.packaging.version import parse
|
||||
from pipenv.patched.pip._internal.cache import WheelCache
|
||||
from pipenv.patched.pip._internal.models.format_control import FormatControl
|
||||
from pipenv.patched.pip._internal.operations.build.build_tracker import get_build_tracker
|
||||
@@ -20,6 +14,9 @@ from pipenv.patched.pip._internal.req.constructors import install_req_from_line
|
||||
from pipenv.patched.pip._internal.req.req_install import InstallRequirement
|
||||
from pipenv.patched.pip._internal.req.req_set import RequirementSet
|
||||
from pipenv.patched.pip._internal.utils.temp_dir import TempDirectory, global_tempdir_manager
|
||||
from pipenv.patched.pip._vendor.packaging.markers import Marker
|
||||
from pipenv.patched.pip._vendor.packaging.utils import canonicalize_name
|
||||
from pipenv.patched.pip._vendor.packaging.version import parse
|
||||
from pipenv.vendor.vistir.compat import fs_str
|
||||
from pipenv.vendor.vistir.contextmanagers import temp_environ
|
||||
from pipenv.vendor.vistir.path import create_tracked_tempdir
|
||||
@@ -35,7 +32,6 @@ from .cache import CACHE_DIR, DependencyCache
|
||||
from .setup_info import SetupInfo
|
||||
from .utils import (
|
||||
clean_requires_python,
|
||||
fix_requires_python_marker,
|
||||
format_requirement,
|
||||
full_groupby,
|
||||
is_pinned_requirement,
|
||||
@@ -46,23 +42,12 @@ from .utils import (
|
||||
)
|
||||
|
||||
if MYPY_RUNNING:
|
||||
from typing import (
|
||||
Any,
|
||||
Dict,
|
||||
Generator,
|
||||
List,
|
||||
Optional,
|
||||
Set,
|
||||
Text,
|
||||
Tuple,
|
||||
TypeVar,
|
||||
Union,
|
||||
)
|
||||
from typing import Any, Dict, List, Optional, Set, Text, TypeVar, Union
|
||||
|
||||
from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement
|
||||
from pipenv.patched.pip._internal.commands.base_command import Command
|
||||
from pipenv.patched.pip._internal.commands import Command
|
||||
from pipenv.patched.pip._internal.index.package_finder import PackageFinder
|
||||
from pipenv.patched.pip._internal.models.candidate import InstallationCandidate
|
||||
from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement
|
||||
|
||||
TRequirement = TypeVar("TRequirement")
|
||||
RequirementType = TypeVar(
|
||||
@@ -95,11 +80,11 @@ def find_all_matches(finder, ireq, pre=False):
|
||||
ireq.
|
||||
|
||||
:param finder: A package finder for discovering matching candidates.
|
||||
:type finder: :class:`~pipenv.patched.pip._internal.index.PackageFinder`
|
||||
:type finder: :class:`~pip._internal.index.PackageFinder`
|
||||
:param ireq: An install requirement.
|
||||
:type ireq: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement`
|
||||
:type ireq: :class:`~pip._internal.req.req_install.InstallRequirement`
|
||||
:return: A list of matching candidates.
|
||||
:rtype: list[:class:`~pipenv.patched.pip._internal.index.InstallationCandidate`]
|
||||
:rtype: list[:class:`~pip._internal.index.InstallationCandidate`]
|
||||
"""
|
||||
|
||||
candidates = clean_requires_python(finder.find_all_candidates(ireq.name))
|
||||
@@ -207,7 +192,7 @@ class AbstractDependency(object):
|
||||
"""Get the dependencies of the supplied candidate.
|
||||
|
||||
:param candidate: An installrequirement
|
||||
:type candidate: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement`
|
||||
:type candidate: :class:`~pip._internal.req.req_install.InstallRequirement`
|
||||
:return: A list of abstract dependencies
|
||||
:rtype: list[:class:`~requirementslib.models.dependency.AbstractDependency`]
|
||||
"""
|
||||
@@ -316,11 +301,11 @@ def get_dependencies(ireq, sources=None, parent=None):
|
||||
"""Get all dependencies for a given install requirement.
|
||||
|
||||
:param ireq: A single InstallRequirement
|
||||
:type ireq: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement`
|
||||
:type ireq: :class:`~pip._internal.req.req_install.InstallRequirement`
|
||||
:param sources: Pipfile-formatted sources, defaults to None
|
||||
:type sources: list[dict], optional
|
||||
:param parent: The parent of this list of dependencies, defaults to None
|
||||
:type parent: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement`
|
||||
:type parent: :class:`~pip._internal.req.req_install.InstallRequirement`
|
||||
:return: A set of dependency lines for generating new InstallRequirements.
|
||||
:rtype: set(str)
|
||||
"""
|
||||
@@ -350,7 +335,7 @@ def get_dependencies_from_wheel_cache(ireq):
|
||||
cache.
|
||||
|
||||
:param ireq: A single InstallRequirement
|
||||
:type ireq: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement`
|
||||
:type ireq: :class:`~pip._internal.req.req_install.InstallRequirement`
|
||||
:return: A set of dependency lines for generating new InstallRequirements.
|
||||
:rtype: set(str) or None
|
||||
"""
|
||||
@@ -377,7 +362,7 @@ def get_dependencies_from_json(ireq):
|
||||
api.
|
||||
|
||||
:param ireq: A single InstallRequirement
|
||||
:type ireq: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement`
|
||||
:type ireq: :class:`~pip._internal.req.req_install.InstallRequirement`
|
||||
:return: A set of dependency lines for generating new InstallRequirements.
|
||||
:rtype: set(str) or None
|
||||
"""
|
||||
@@ -427,7 +412,7 @@ def get_dependencies_from_cache(ireq):
|
||||
dependency cache.
|
||||
|
||||
:param ireq: A single InstallRequirement
|
||||
:type ireq: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement`
|
||||
:type ireq: :class:`~pip._internal.req.req_install.InstallRequirement`
|
||||
:return: A set of dependency lines for generating new InstallRequirements.
|
||||
:rtype: set(str) or None
|
||||
"""
|
||||
@@ -531,7 +516,7 @@ def get_dependencies_from_index(dep, sources=None, pip_options=None, wheel_cache
|
||||
resolver.
|
||||
|
||||
:param dep: A single InstallRequirement
|
||||
:type dep: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement`
|
||||
:type dep: :class:`~pip._internal.req.req_install.InstallRequirement`
|
||||
:param sources: Pipfile-formatted sources, defaults to None
|
||||
:type sources: list[dict], optional
|
||||
:return: A set of dependency lines for generating new InstallRequirements.
|
||||
@@ -570,9 +555,9 @@ def get_pip_options(args=None, sources=None, pip_command=None):
|
||||
:param sources: A list of pipfile-formatted sources, defaults to None
|
||||
:param sources: list[dict], optional
|
||||
:param pip_command: A pre-built pip command instance
|
||||
:type pip_command: :class:`~pipenv.patched.pip._internal.cli.base_command.Command`
|
||||
:type pip_command: :class:`~pip._internal.cli.base_command.Command`
|
||||
:return: An instance of pip_options using the supplied arguments plus sane defaults
|
||||
:rtype: :class:`~pipenv.patched.pip._internal.cli.cmdoptions`
|
||||
:rtype: :class:`~pip._internal.cli.cmdoptions`
|
||||
"""
|
||||
|
||||
if not pip_command:
|
||||
@@ -594,11 +579,11 @@ def get_finder(sources=None, pip_command=None, pip_options=None):
|
||||
:param sources: A list of pipfile-formatted sources, defaults to None
|
||||
:param sources: list[dict], optional
|
||||
:param pip_command: A pip command instance, defaults to None
|
||||
:type pip_command: :class:`~pipenv.patched.pip._internal.cli.base_command.Command`
|
||||
:type pip_command: :class:`~pip._internal.cli.base_command.Command`
|
||||
:param pip_options: A pip options, defaults to None
|
||||
:type pip_options: :class:`~pipenv.patched.pip._internal.cli.cmdoptions`
|
||||
:type pip_options: :class:`~pip._internal.cli.cmdoptions`
|
||||
:return: A package finder
|
||||
:rtype: :class:`~pipenv.patched.pip._internal.index.PackageFinder`
|
||||
:rtype: :class:`~pip._internal.index.PackageFinder`
|
||||
"""
|
||||
|
||||
if not pip_command:
|
||||
@@ -618,12 +603,12 @@ def start_resolver(finder=None, session=None, wheel_cache=None):
|
||||
"""Context manager to produce a resolver.
|
||||
|
||||
:param finder: A package finder to use for searching the index
|
||||
:type finder: :class:`~pipenv.patched.pip._internal.index.PackageFinder`
|
||||
:type finder: :class:`~pip._internal.index.PackageFinder`
|
||||
:param :class:`~requests.Session` session: A session instance
|
||||
:param :class:`~pipenv.patched.pip._internal.cache.WheelCache` wheel_cache: A pip WheelCache instance
|
||||
:param :class:`~pip._internal.cache.WheelCache` wheel_cache: A pip WheelCache instance
|
||||
:return: A 3-tuple of finder, preparer, resolver
|
||||
:rtype: (:class:`~pipenv.patched.pip._internal.operations.prepare.RequirementPreparer`,
|
||||
:class:`~pipenv.patched.pip._internal.resolve.Resolver`)
|
||||
:rtype: (:class:`~pip._internal.operations.prepare.RequirementPreparer`,
|
||||
:class:`~pip._internal.resolve.Resolver`)
|
||||
"""
|
||||
|
||||
pip_command = get_pip_command()
|
||||
|
||||
+2
-3
@@ -1,4 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import itertools
|
||||
import operator
|
||||
import re
|
||||
@@ -6,7 +5,7 @@ from collections.abc import Mapping, Set
|
||||
from functools import lru_cache, reduce
|
||||
|
||||
import pipenv.vendor.attr as attr
|
||||
import distlib.markers
|
||||
from pipenv.vendor.distlib import markers
|
||||
from pipenv.patched.pip._vendor.packaging.markers import InvalidMarker, Marker
|
||||
from pipenv.patched.pip._vendor.packaging.specifiers import LegacySpecifier, Specifier, SpecifierSet
|
||||
from pipenv.patched.pip._vendor.packaging.version import parse
|
||||
@@ -514,7 +513,7 @@ def get_contained_pyversions(marker):
|
||||
return set()
|
||||
# Use the distlib dictionary parser to create a dictionary 'trie' which is a bit
|
||||
# easier to reason about
|
||||
marker_dict = distlib.markers.parse_marker(marker_str)[0]
|
||||
marker_dict = markers.parse_marker(marker_str)[0]
|
||||
version_set = set()
|
||||
pyversions, _ = parse_marker_dict(marker_dict)
|
||||
if isinstance(pyversions, set):
|
||||
|
||||
+16
-18
@@ -1,4 +1,3 @@
|
||||
# -*- coding=utf-8 -*-
|
||||
import datetime
|
||||
import functools
|
||||
import io
|
||||
@@ -12,10 +11,10 @@ from functools import reduce
|
||||
from typing import Sequence
|
||||
|
||||
import pipenv.vendor.attr as attr
|
||||
import distlib.metadata
|
||||
import distlib.wheel
|
||||
import pipenv.patched.pip._vendor.requests as requests
|
||||
import pipenv.vendor.vistir as vistir
|
||||
from pipenv.vendor.distlib import wheel
|
||||
from pipenv.vendor.distlib.metadata import Metadata
|
||||
from pipenv.patched.pip._vendor.packaging.markers import Marker
|
||||
from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement
|
||||
from pipenv.patched.pip._vendor.packaging.specifiers import Specifier, SpecifierSet
|
||||
@@ -47,7 +46,6 @@ if MYPY_RUNNING:
|
||||
Any,
|
||||
Callable,
|
||||
Dict,
|
||||
Generator,
|
||||
Generic,
|
||||
Iterator,
|
||||
List,
|
||||
@@ -59,7 +57,7 @@ if MYPY_RUNNING:
|
||||
Union,
|
||||
)
|
||||
|
||||
from pipenv.vendor.attr import Attribute # noqa
|
||||
from attr import Attribute # noqa
|
||||
|
||||
from .setup_info import SetupInfo
|
||||
|
||||
@@ -137,7 +135,7 @@ def validate_digest(inst, attrib, value):
|
||||
|
||||
|
||||
def get_local_wheel_metadata(wheel_file):
|
||||
# type: (str) -> Optional[distlib.metadata.Metadata]
|
||||
# type: (str) -> Optional[Metadata]
|
||||
parsed_metadata = None
|
||||
with io.open(wheel_file, "rb") as fh:
|
||||
with zipfile.ZipFile(fh, mode="r", compression=zipfile.ZIP_DEFLATED) as zf:
|
||||
@@ -149,7 +147,7 @@ def get_local_wheel_metadata(wheel_file):
|
||||
if metadata is None:
|
||||
raise RuntimeError("No metadata found in wheel: {0}".format(wheel_file))
|
||||
with zf.open(metadata, "r") as metadata_fh:
|
||||
parsed_metadata = distlib.metadata.Metadata(fileobj=metadata_fh)
|
||||
parsed_metadata = Metadata(fileobj=metadata_fh)
|
||||
return parsed_metadata
|
||||
|
||||
|
||||
@@ -165,7 +163,7 @@ def get_remote_sdist_metadata(line):
|
||||
|
||||
|
||||
def get_remote_wheel_metadata(whl_file):
|
||||
# type: (str) -> Optional[distlib.metadata.Metadata]
|
||||
# type: (str) -> Optional[Metadata]
|
||||
parsed_metadata = None
|
||||
data = io.BytesIO()
|
||||
with vistir.contextmanagers.open_file(whl_file) as fp:
|
||||
@@ -180,7 +178,7 @@ def get_remote_wheel_metadata(whl_file):
|
||||
if metadata is None:
|
||||
raise RuntimeError("No metadata found in wheel: {0}".format(whl_file))
|
||||
with zf.open(metadata, "r") as metadata_fh:
|
||||
parsed_metadata = distlib.metadata.Metadata(fileobj=metadata_fh)
|
||||
parsed_metadata = Metadata(fileobj=metadata_fh)
|
||||
return parsed_metadata
|
||||
|
||||
|
||||
@@ -258,11 +256,11 @@ class Dependency(object):
|
||||
markers = [marker_from_specifier(str(s)) for s in specifiers]
|
||||
py_version_part = reduce(merge_markers, markers)
|
||||
if self.markers:
|
||||
line_str = "{0}; {1}".format(line_str, str(self.markers))
|
||||
line_str = "{0} ; {1}".format(line_str, str(self.markers))
|
||||
if py_version_part:
|
||||
line_str = "{0} and {1}".format(line_str, py_version_part)
|
||||
elif py_version_part and not self.markers:
|
||||
line_str = "{0}; {1}".format(line_str, py_version_part)
|
||||
line_str = "{0} ; {1}".format(line_str, py_version_part)
|
||||
return line_str
|
||||
|
||||
def pin(self):
|
||||
@@ -350,7 +348,7 @@ class Dependency(object):
|
||||
marker_str = "{0!s}".format(marker)
|
||||
req_str = "{0}=={1}".format(info.name, info.version)
|
||||
if marker_str:
|
||||
req_str = "{0}; {1}".format(req_str, marker_str)
|
||||
req_str = "{0} ; {1}".format(req_str, marker_str)
|
||||
req = PackagingRequirement(req_str)
|
||||
requires_python_str = (
|
||||
info.requires_python if info.requires_python is not None else ""
|
||||
@@ -570,7 +568,7 @@ class ReleaseUrl(object):
|
||||
markers = self.markers
|
||||
req_str = "{0} @ {1}#egg={0}".format(self.name, self.url)
|
||||
if markers:
|
||||
req_str = "{0}; {1}".format(req_str, markers)
|
||||
req_str = "{0} ; {1}".format(req_str, markers)
|
||||
return req_str
|
||||
|
||||
def get_markers_from_wheel(self):
|
||||
@@ -644,7 +642,7 @@ class ReleaseUrl(object):
|
||||
release_url = cls(**filter_dict(creation_kwargs)) # type: ignore
|
||||
if release_url.is_wheel:
|
||||
supported_tags = [
|
||||
parse_tag(Tag(*tag)) for tag in distlib.wheel.Wheel(release_url.url).tags
|
||||
parse_tag(Tag(*tag)) for tag in wheel.Wheel(release_url.url).tags
|
||||
]
|
||||
release_url = attr.evolve(release_url, tags=supported_tags)
|
||||
return release_url
|
||||
@@ -858,8 +856,8 @@ class ReleaseCollection(object):
|
||||
def wheels(self):
|
||||
# type: () -> Iterator[ReleaseUrl]
|
||||
for release in self.sort_releases():
|
||||
for wheel in release.wheels:
|
||||
yield wheel
|
||||
for w in release.wheels:
|
||||
yield w
|
||||
|
||||
def sdists(self):
|
||||
# type: () -> Iterator[ReleaseUrl]
|
||||
@@ -1060,8 +1058,8 @@ class Package(object):
|
||||
@property
|
||||
def latest_wheels(self):
|
||||
# type: () -> Iterator[ReleaseUrl]
|
||||
for wheel in self.urls.wheels:
|
||||
yield wheel
|
||||
for w in self.urls.wheels:
|
||||
yield w
|
||||
|
||||
@property
|
||||
def dependencies(self):
|
||||
|
||||
+1
-1
@@ -135,7 +135,7 @@ class Project(object):
|
||||
)
|
||||
|
||||
def add_line_to_pipfile(self, line, develop):
|
||||
from pipenv.vendor.requirementslib import Requirement
|
||||
from requirementslib import Requirement
|
||||
|
||||
requirement = Requirement.from_line(line)
|
||||
section = self._get_pipfile_section(develop=develop)
|
||||
|
||||
+11
-12
@@ -60,7 +60,6 @@ from .setup_info import (
|
||||
_prepare_wheel_building_kwargs,
|
||||
ast_parse_setup_py,
|
||||
get_metadata,
|
||||
parse_setup_cfg,
|
||||
)
|
||||
from .url import URI
|
||||
from .utils import (
|
||||
@@ -205,7 +204,7 @@ class Line(object):
|
||||
def __str__(self):
|
||||
# type: () -> str
|
||||
if self.markers:
|
||||
return "{0}; {1}".format(self.get_line(), self.markers)
|
||||
return "{0} ; {1}".format(self.get_line(), self.markers)
|
||||
return self.get_line()
|
||||
|
||||
def get_line(
|
||||
@@ -237,7 +236,7 @@ class Line(object):
|
||||
# we anticipate this will be used if passing directly to the command line
|
||||
# for pip.
|
||||
if with_markers and self.markers:
|
||||
line = "{0}; {1}".format(line, self.markers)
|
||||
line = "{0} ; {1}".format(line, self.markers)
|
||||
if with_prefix and self.editable and not as_list:
|
||||
line = '"{0}"'.format(line)
|
||||
if as_list:
|
||||
@@ -1182,8 +1181,7 @@ class Line(object):
|
||||
def parse_markers(self):
|
||||
# type: () -> None
|
||||
if self.markers:
|
||||
marker_str = self.markers.replace('"', "'")
|
||||
markers = PackagingRequirement("fakepkg; {0}".format(marker_str)).marker
|
||||
pkg_name, markers = split_markers_from_line(self.line)
|
||||
self.parsed_marker = markers
|
||||
|
||||
@property
|
||||
@@ -1287,7 +1285,6 @@ class Line(object):
|
||||
if self.markers:
|
||||
self.markers = self.markers.replace('"', "'")
|
||||
self.parse_extras()
|
||||
self.line = self.line.strip('"').strip("'").strip()
|
||||
if self.line.startswith("git+file:/") and not self.line.startswith(
|
||||
"git+file:///"
|
||||
):
|
||||
@@ -1469,7 +1466,7 @@ class FileRequirement(object):
|
||||
forward slashes. Can be None if the line is a remote URI.
|
||||
- `uri` is the absolute URI to the package. Can be None if the line is
|
||||
not a URI.
|
||||
- `link` is an instance of :class:`pipenv.patched.pip._internal.index.Link`,
|
||||
- `link` is an instance of :class:`pip._internal.index.Link`,
|
||||
representing a URI parse result based on the value of `uri`.
|
||||
|
||||
This function is provided to deal with edge cases concerning URIs
|
||||
@@ -2536,7 +2533,7 @@ class Requirement(object):
|
||||
if self._specifiers and not (self.is_file_or_url or self.is_vcs):
|
||||
line_parts.append(self._specifiers)
|
||||
if self.markers:
|
||||
line_parts.append("; {0}".format(self.markers.replace('"', "'")))
|
||||
line_parts.append(" ; {0}".format(self.markers.replace('"', "'")))
|
||||
if self.hashes_as_pip and not (self.editable or self.vcs or self.is_vcs):
|
||||
line_parts.append(self.hashes_as_pip)
|
||||
if self.editable:
|
||||
@@ -2695,7 +2692,9 @@ class Requirement(object):
|
||||
r = named_req_from_parsed_line(parsed_line)
|
||||
req_markers = None
|
||||
if parsed_line.markers:
|
||||
req_markers = PackagingRequirement("fakepkg; {0}".format(parsed_line.markers))
|
||||
req_markers = PackagingRequirement(
|
||||
"fakepkg ; {0}".format(parsed_line.markers)
|
||||
)
|
||||
if r is not None and r.req is not None:
|
||||
r.req.marker = getattr(req_markers, "marker", None) if req_markers else None
|
||||
args = {} # type: Dict[STRING_TYPE, CREATION_ARG_TYPES]
|
||||
@@ -2754,7 +2753,7 @@ class Requirement(object):
|
||||
req_markers = None
|
||||
if markers:
|
||||
markers = str(markers)
|
||||
req_markers = PackagingRequirement("fakepkg; {0}".format(markers))
|
||||
req_markers = PackagingRequirement("fakepkg ; {0}".format(markers))
|
||||
if r.req is not None:
|
||||
r.req.marker = req_markers.marker
|
||||
extras = _pipfile.get("extras")
|
||||
@@ -2821,7 +2820,7 @@ class Requirement(object):
|
||||
# type: () -> Marker
|
||||
markers = self.markers
|
||||
if markers:
|
||||
fake_pkg = PackagingRequirement("fakepkg; {0}".format(markers))
|
||||
fake_pkg = PackagingRequirement("fakepkg ; {0}".format(markers))
|
||||
markers = fake_pkg.marker
|
||||
return markers
|
||||
|
||||
@@ -2994,7 +2993,7 @@ class Requirement(object):
|
||||
:param sources: list[dict], optional
|
||||
:param PackageFinder finder: A **PackageFinder** instance from pip's repository implementation
|
||||
:return: A list of Installation Candidates
|
||||
:rtype: list[ :class:`~pipenv.patched.pip._internal.index.InstallationCandidate` ]
|
||||
:rtype: list[ :class:`~pip._internal.index.InstallationCandidate` ]
|
||||
"""
|
||||
|
||||
from .dependencies import find_all_matches, get_finder
|
||||
|
||||
+29
-39
@@ -2,28 +2,32 @@ import ast
|
||||
import atexit
|
||||
import configparser
|
||||
import contextlib
|
||||
import importlib
|
||||
import operator
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
from collections.abc import Iterable, Mapping
|
||||
from functools import lru_cache, partial
|
||||
from contextlib import ExitStack
|
||||
from functools import lru_cache
|
||||
from os import scandir
|
||||
from pathlib import Path
|
||||
from urllib.parse import parse_qs, urlparse, urlunparse
|
||||
from weakref import finalize
|
||||
|
||||
import pipenv.vendor.attr as attr
|
||||
from pipenv.patched.pip._vendor.pep517 import envbuild
|
||||
from pipenv.patched.pip._vendor.pep517 import wrappers
|
||||
import attr
|
||||
from pipenv.patched.pip._vendor.pep517 import envbuild, wrappers
|
||||
from pipenv.vendor.distlib.wheel import Wheel
|
||||
from pipenv.patched.pip._vendor.packaging.markers import Marker
|
||||
from pipenv.patched.pip._vendor.packaging.specifiers import SpecifierSet
|
||||
from pipenv.patched.pip._vendor.packaging.version import parse
|
||||
from pipenv.patched.pip._internal.commands.install import InstallCommand
|
||||
from pipenv.patched.pip._internal.network.download import Downloader
|
||||
from pipenv.patched.pip._internal.utils.temp_dir import global_tempdir_manager
|
||||
from pipenv.patched.pip._internal.utils.urls import url_to_path
|
||||
from pipenv.patched.pip._vendor.packaging.markers import Marker
|
||||
from pipenv.patched.pip._vendor.packaging.specifiers import SpecifierSet
|
||||
from pipenv.patched.pip._vendor.packaging.version import parse
|
||||
from pipenv.patched.pip._vendor.pkg_resources import (
|
||||
PathMetadata,
|
||||
Requirement,
|
||||
distributions_from_metadata,
|
||||
find_distributions,
|
||||
)
|
||||
from pipenv.vendor.platformdirs import user_cache_dir
|
||||
from pipenv.vendor.vistir.contextmanagers import cd, temp_path
|
||||
from pipenv.vendor.vistir.misc import run
|
||||
@@ -42,14 +46,6 @@ from .utils import (
|
||||
strip_extras_markers_from_requirement,
|
||||
)
|
||||
|
||||
try:
|
||||
import pipenv.patched.pip._vendor.pkg_resources.extern.packaging.requirements as pkg_resources_requirements
|
||||
except ModuleNotFoundError:
|
||||
pkg_resources_requirements = None
|
||||
|
||||
from contextlib import ExitStack
|
||||
from os import scandir
|
||||
|
||||
if MYPY_RUNNING:
|
||||
from typing import (
|
||||
Any,
|
||||
@@ -66,12 +62,11 @@ if MYPY_RUNNING:
|
||||
Union,
|
||||
)
|
||||
|
||||
import pipenv.patched.pip._vendor.requests as requests
|
||||
from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement
|
||||
from pipenv.patched.pip._internal.index.package_finder import PackageFinder
|
||||
from pipenv.patched.pip._internal.req.req_install import InstallRequirement
|
||||
from pipenv.patched.pip._vendor.pkg_resources import DistInfoDistribution, EggInfoDistribution, PathMetadata
|
||||
from pipenv.patched.pip._vendor.pkg_resources import Requirement as PkgResourcesRequirement
|
||||
from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement
|
||||
from pipenv.patched.pip._vendor.pkg_resources import DistInfoDistribution, EggInfoDistribution
|
||||
from pipenv.patched.pip._vendor.requests import Session
|
||||
|
||||
try:
|
||||
from setuptools.dist import Distribution
|
||||
@@ -157,9 +152,7 @@ def make_base_requirements(reqs):
|
||||
for req in reqs:
|
||||
if isinstance(req, BaseRequirement):
|
||||
requirements.add(req)
|
||||
elif pkg_resources_requirements is not None and isinstance(
|
||||
req, pkg_resources_requirements.Requirement
|
||||
):
|
||||
elif isinstance(req, Requirement):
|
||||
requirements.add(BaseRequirement.from_req(req))
|
||||
elif req and isinstance(req, str) and not req.startswith("#"):
|
||||
requirements.add(BaseRequirement.from_string(req))
|
||||
@@ -585,8 +578,7 @@ def _get_src_dir(root):
|
||||
|
||||
@lru_cache()
|
||||
def ensure_reqs(reqs):
|
||||
# type: (List[Union[S, PkgResourcesRequirement]]) -> List[PkgResourcesRequirement]
|
||||
import pipenv.patched.pip._vendor.pkg_resources as pkg_resources
|
||||
# type: (List[Union[S, Requirement]]) -> List[Requirement]
|
||||
|
||||
if not isinstance(reqs, Iterable):
|
||||
raise TypeError("Expecting an Iterable, got %r" % reqs)
|
||||
@@ -595,7 +587,7 @@ def ensure_reqs(reqs):
|
||||
if not req:
|
||||
continue
|
||||
if isinstance(req, str):
|
||||
req = pkg_resources.Requirement.parse("{0}".format(str(req)))
|
||||
req = Requirement.parse("{0}".format(str(req)))
|
||||
# req = strip_extras_markers_from_requirement(req)
|
||||
new_reqs.append(req)
|
||||
return new_reqs
|
||||
@@ -731,13 +723,12 @@ def find_distinfo(target, pkg_name=None):
|
||||
|
||||
def get_distinfo_dist(path, pkg_name=None):
|
||||
# type: (S, Optional[S]) -> Optional[DistInfoDistribution]
|
||||
import pipenv.patched.pip._vendor.pkg_resources as pkg_resources
|
||||
|
||||
dist_dir = next(iter(find_distinfo(path, pkg_name=pkg_name)), None)
|
||||
if dist_dir is not None:
|
||||
metadata_dir = dist_dir.path
|
||||
base_dir = os.path.dirname(metadata_dir)
|
||||
dist = next(iter(pkg_resources.find_distributions(base_dir)), None)
|
||||
dist = next(iter(find_distributions(base_dir)), None)
|
||||
if dist is not None:
|
||||
return dist
|
||||
return None
|
||||
@@ -745,14 +736,13 @@ def get_distinfo_dist(path, pkg_name=None):
|
||||
|
||||
def get_egginfo_dist(path, pkg_name=None):
|
||||
# type: (S, Optional[S]) -> Optional[EggInfoDistribution]
|
||||
import pipenv.patched.pip._vendor.pkg_resources as pkg_resources
|
||||
|
||||
egg_dir = next(iter(find_egginfo(path, pkg_name=pkg_name)), None)
|
||||
if egg_dir is not None:
|
||||
metadata_dir = egg_dir.path
|
||||
base_dir = os.path.dirname(metadata_dir)
|
||||
path_metadata = pkg_resources.PathMetadata(base_dir, metadata_dir)
|
||||
dist_iter = pkg_resources.distributions_from_metadata(path_metadata.egg_info)
|
||||
path_metadata = PathMetadata(base_dir, metadata_dir)
|
||||
dist_iter = distributions_from_metadata(path_metadata.egg_info)
|
||||
dist = next(iter(dist_iter), None)
|
||||
if dist is not None:
|
||||
return dist
|
||||
@@ -829,7 +819,7 @@ def get_metadata_from_dist(dist):
|
||||
dep_map = dist._build_dep_map()
|
||||
except Exception:
|
||||
dep_map = {}
|
||||
deps = [] # type: List[PkgResourcesRequirement]
|
||||
deps = [] # type: List[Requirement]
|
||||
extras = {}
|
||||
for k in dep_map.keys():
|
||||
if k is None:
|
||||
@@ -926,18 +916,18 @@ class BaseRequirement(object):
|
||||
name = attr.ib(default="", eq=True, order=True) # type: STRING_TYPE
|
||||
requirement = attr.ib(
|
||||
default=None, eq=True, order=True
|
||||
) # type: Optional[PkgResourcesRequirement]
|
||||
) # type: Optional[Requirement]
|
||||
|
||||
def __str__(self):
|
||||
# type: () -> S
|
||||
return "{0}".format(str(self.requirement))
|
||||
|
||||
def as_dict(self):
|
||||
# type: () -> Dict[STRING_TYPE, Optional[PkgResourcesRequirement]]
|
||||
# type: () -> Dict[STRING_TYPE, Optional[Requirement]]
|
||||
return {self.name: self.requirement}
|
||||
|
||||
def as_tuple(self):
|
||||
# type: () -> Tuple[STRING_TYPE, Optional[PkgResourcesRequirement]]
|
||||
# type: () -> Tuple[STRING_TYPE, Optional[Requirement]]
|
||||
return (self.name, self.requirement)
|
||||
|
||||
@classmethod
|
||||
@@ -951,7 +941,7 @@ class BaseRequirement(object):
|
||||
@classmethod
|
||||
@lru_cache()
|
||||
def from_req(cls, req):
|
||||
# type: (PkgResourcesRequirement) -> BaseRequirement
|
||||
# type: (Requirement) -> BaseRequirement
|
||||
name = None
|
||||
key = getattr(req, "key", None)
|
||||
name = getattr(req, "name", None)
|
||||
@@ -1484,7 +1474,7 @@ build-backend = "{1}"
|
||||
@classmethod
|
||||
@lru_cache()
|
||||
def from_ireq(cls, ireq, subdir=None, finder=None, session=None):
|
||||
# type: (InstallRequirement, Optional[AnyStr], Optional[PackageFinder], Optional[requests.Session]) -> Optional[SetupInfo]
|
||||
# type: (InstallRequirement, Optional[AnyStr], Optional[PackageFinder], Optional[Session]) -> Optional[SetupInfo]
|
||||
if not ireq.link:
|
||||
return None
|
||||
if ireq.link.is_wheel:
|
||||
|
||||
+19
-34
@@ -1,4 +1,3 @@
|
||||
import io
|
||||
import os
|
||||
import re
|
||||
import string
|
||||
@@ -10,11 +9,14 @@ from pathlib import Path
|
||||
|
||||
import pipenv.vendor.tomlkit as tomlkit
|
||||
from pipenv.vendor.attr import validators
|
||||
from pipenv.patched.pip._vendor.packaging.markers import InvalidMarker, Marker, Op, Value, Variable
|
||||
from pipenv.patched.pip._vendor.packaging.specifiers import InvalidSpecifier, Specifier, SpecifierSet
|
||||
from pipenv.patched.pip._vendor.packaging.version import parse as parse_version
|
||||
from pipenv.patched.pip._internal.models.link import Link
|
||||
from pipenv.patched.pip._internal.req.constructors import install_req_from_line
|
||||
from pipenv.patched.pip._vendor.packaging.markers import InvalidMarker, Marker, Op, Value, Variable
|
||||
from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement
|
||||
from pipenv.patched.pip._vendor.packaging.specifiers import InvalidSpecifier, Specifier, SpecifierSet
|
||||
from pipenv.patched.pip._vendor.packaging.utils import canonicalize_name
|
||||
from pipenv.patched.pip._vendor.packaging.version import parse as parse_version
|
||||
from pipenv.patched.pip._vendor.pkg_resources import Requirement, get_distribution, safe_name
|
||||
from pipenv.vendor.plette.models import Package, PackageCollection
|
||||
from pipenv.vendor.tomlkit.container import Container
|
||||
from pipenv.vendor.tomlkit.items import AoT, Array, Bool, InlineTable, Item, String, Table
|
||||
@@ -35,7 +37,6 @@ if MYPY_RUNNING:
|
||||
List,
|
||||
Match,
|
||||
Optional,
|
||||
Sequence,
|
||||
Set,
|
||||
Text,
|
||||
Tuple,
|
||||
@@ -48,8 +49,6 @@ if MYPY_RUNNING:
|
||||
from pipenv.patched.pip._vendor.packaging.markers import Op as PkgResourcesOp
|
||||
from pipenv.patched.pip._vendor.packaging.markers import Value as PkgResourcesValue
|
||||
from pipenv.patched.pip._vendor.packaging.markers import Variable as PkgResourcesVariable
|
||||
from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement
|
||||
from pipenv.patched.pip._vendor.pkg_resources import Requirement as PkgResourcesRequirement
|
||||
from pipenv.patched.pip._vendor.urllib3.util.url import Url
|
||||
|
||||
_T = TypeVar("_T")
|
||||
@@ -58,7 +57,7 @@ if MYPY_RUNNING:
|
||||
TValue = TypeVar("TValue", PkgResourcesValue, Value)
|
||||
TOp = TypeVar("TOp", PkgResourcesOp, Op)
|
||||
MarkerTuple = Tuple[TVariable, TOp, TValue]
|
||||
TRequirement = Union[PackagingRequirement, PkgResourcesRequirement]
|
||||
TRequirement = Union[PackagingRequirement, Requirement]
|
||||
STRING_TYPE = Union[bytes, str, Text]
|
||||
TOML_DICT_TYPES = Union[Container, Package, PackageCollection, Table, InlineTable]
|
||||
S = TypeVar("S", bytes, str, Text)
|
||||
@@ -189,7 +188,6 @@ def init_requirement(name):
|
||||
|
||||
if not isinstance(name, str):
|
||||
raise TypeError("must supply a name to generate a requirement")
|
||||
from pipenv.patched.pip._vendor.pkg_resources import Requirement
|
||||
|
||||
req = Requirement.parse(name)
|
||||
req.vcs = None
|
||||
@@ -225,9 +223,6 @@ def parse_extras(extras_str):
|
||||
:return: A sorted list of extras
|
||||
:rtype: List[str]
|
||||
"""
|
||||
|
||||
from pipenv.patched.pip._vendor.pkg_resources import Requirement
|
||||
|
||||
extras = Requirement.parse("fakepkg{0}".format(extras_to_string(extras_str))).extras
|
||||
return sorted(dedup([extra.lower() for extra in extras]))
|
||||
|
||||
@@ -456,11 +451,8 @@ def _strip_extras_markers(marker):
|
||||
@lru_cache()
|
||||
def get_setuptools_version():
|
||||
# type: () -> Optional[STRING_TYPE]
|
||||
import pipenv.patched.pip._vendor.pkg_resources as pkg_resources
|
||||
|
||||
setuptools_dist = pkg_resources.get_distribution(
|
||||
pkg_resources.Requirement("setuptools")
|
||||
)
|
||||
setuptools_dist = get_distribution(Requirement("setuptools"))
|
||||
return getattr(setuptools_dist, "version", None)
|
||||
|
||||
|
||||
@@ -526,10 +518,7 @@ def split_markers_from_line(line):
|
||||
)
|
||||
if line_quote and line.endswith(line_quote):
|
||||
line = line.strip(line_quote)
|
||||
if not any(line.startswith(uri_prefix) for uri_prefix in SCHEME_LIST):
|
||||
marker_sep = ";"
|
||||
else:
|
||||
marker_sep = "; "
|
||||
marker_sep = " ; "
|
||||
markers = None
|
||||
if marker_sep in line:
|
||||
line, markers = line.split(marker_sep, 1)
|
||||
@@ -644,7 +633,7 @@ def _requirement_to_str_lowercase_name(requirement):
|
||||
parts.append("@ {0}".format(requirement.url))
|
||||
|
||||
if requirement.marker:
|
||||
parts.append("; {0}".format(requirement.marker))
|
||||
parts.append(" ; {0}".format(requirement.marker))
|
||||
|
||||
return "".join(parts)
|
||||
|
||||
@@ -666,11 +655,11 @@ def format_requirement(ireq):
|
||||
|
||||
if str(ireq.req.marker) != str(ireq.markers):
|
||||
if not ireq.req.marker:
|
||||
line = "{}; {}".format(line, ireq.markers)
|
||||
line = "{} ; {}".format(line, ireq.markers)
|
||||
else:
|
||||
name, markers = line.split(";", 1)
|
||||
markers = markers.strip()
|
||||
line = "{}; ({}) and ({})".format(name, markers, ireq.markers)
|
||||
line = "{} ; ({}) and ({})".format(name, markers, ireq.markers)
|
||||
|
||||
return line
|
||||
|
||||
@@ -851,7 +840,7 @@ def name_from_req(req):
|
||||
def make_install_requirement(
|
||||
name, version=None, extras=None, markers=None, constraint=False
|
||||
):
|
||||
"""Generates an :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement`.
|
||||
"""Generates an :class:`~pip._internal.req.req_install.InstallRequirement`.
|
||||
|
||||
Create an InstallRequirement from the supplied metadata.
|
||||
|
||||
@@ -866,7 +855,7 @@ def make_install_requirement(
|
||||
:param constraint: Whether to flag the requirement as a constraint, defaults to False.
|
||||
:param constraint: bool, optional
|
||||
:return: A generated InstallRequirement
|
||||
:rtype: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement`
|
||||
:rtype: :class:`~pip._internal.req.req_install.InstallRequirement`
|
||||
"""
|
||||
requirement_string = "{0}".format(name)
|
||||
if extras:
|
||||
@@ -876,16 +865,16 @@ def make_install_requirement(
|
||||
if version:
|
||||
requirement_string = "{0}=={1}".format(requirement_string, str(version))
|
||||
if markers:
|
||||
requirement_string = "{0}; {1}".format(requirement_string, str(markers))
|
||||
requirement_string = "{0} ; {1}".format(requirement_string, str(markers))
|
||||
return install_req_from_line(requirement_string, constraint=constraint)
|
||||
|
||||
|
||||
def version_from_ireq(ireq):
|
||||
"""version_from_ireq Extract the version from a supplied
|
||||
:class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement`
|
||||
:class:`~pip._internal.req.req_install.InstallRequirement`
|
||||
|
||||
:param ireq: An InstallRequirement
|
||||
:type ireq: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement`
|
||||
:type ireq: :class:`~pip._internal.req.req_install.InstallRequirement`
|
||||
:return: The version of the InstallRequirement.
|
||||
:rtype: str
|
||||
"""
|
||||
@@ -907,7 +896,7 @@ def clean_requires_python(candidates):
|
||||
`requires_python` attributes."""
|
||||
all_candidates = []
|
||||
sys_version = ".".join(map(str, sys.version_info[:3]))
|
||||
from pipenv.patched.pip._vendor.packaging.version import parse as parse_version
|
||||
from pip._vendor.packaging.version import parse as parse_version
|
||||
|
||||
py_version = parse_version(os.environ.get("PIP_PYTHON_VERSION", sys_version))
|
||||
for c in candidates:
|
||||
@@ -931,8 +920,6 @@ def clean_requires_python(candidates):
|
||||
|
||||
|
||||
def fix_requires_python_marker(requires_python):
|
||||
from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement
|
||||
|
||||
marker_str = ""
|
||||
if any(requires_python.startswith(op) for op in Specifier._operators.keys()):
|
||||
spec_dict = defaultdict(set)
|
||||
@@ -952,7 +939,7 @@ def fix_requires_python_marker(requires_python):
|
||||
for op, vals in spec_dict.items()
|
||||
]
|
||||
)
|
||||
marker_to_add = PackagingRequirement("fakepkg; {0}".format(marker_str)).marker
|
||||
marker_to_add = PackagingRequirement("fakepkg ; {0}".format(marker_str)).marker
|
||||
return marker_to_add
|
||||
|
||||
|
||||
@@ -981,8 +968,6 @@ def get_name_variants(pkg):
|
||||
|
||||
if not isinstance(pkg, str):
|
||||
raise TypeError("must provide a string to derive package names")
|
||||
from pipenv.patched.pip._vendor.packaging.utils import canonicalize_name
|
||||
from pipenv.patched.pip._vendor.pkg_resources import safe_name
|
||||
|
||||
pkg = pkg.lower()
|
||||
names = {safe_name(pkg), canonicalize_name(pkg), pkg.replace("-", "_")}
|
||||
|
||||
+3
-8
@@ -1,6 +1,3 @@
|
||||
# -*- coding=utf-8 -*-
|
||||
from __future__ import absolute_import, print_function
|
||||
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
@@ -14,6 +11,7 @@ from pipenv.patched.pip._internal.commands.install import InstallCommand
|
||||
from pipenv.patched.pip._internal.models.target_python import TargetPython
|
||||
from pipenv.patched.pip._internal.utils.filetypes import is_archive_file
|
||||
from pipenv.patched.pip._internal.utils.misc import is_installable_dir
|
||||
from pipenv.patched.pip._vendor.packaging import specifiers
|
||||
from pipenv.vendor.vistir.path import ensure_mkdir_p, is_valid_url
|
||||
|
||||
from .environment import MYPY_RUNNING
|
||||
@@ -159,7 +157,6 @@ def convert_entry_to_path(path):
|
||||
def is_installable_file(path):
|
||||
# type: (PipfileType) -> bool
|
||||
"""Determine if a path can potentially be installed."""
|
||||
from pipenv.patched.pip._vendor.packaging import specifiers
|
||||
|
||||
if isinstance(path, Mapping):
|
||||
path = convert_entry_to_path(path)
|
||||
@@ -203,11 +200,9 @@ def is_installable_file(path):
|
||||
def get_dist_metadata(dist):
|
||||
from email.parser import FeedParser
|
||||
|
||||
import pipenv.patched.pip._vendor.pkg_resources as pkg_resources
|
||||
from pipenv.patched.pip._vendor.pkg_resources import DistInfoDistribution
|
||||
|
||||
if isinstance(dist, pkg_resources.DistInfoDistribution) and dist.has_metadata(
|
||||
"METADATA"
|
||||
):
|
||||
if isinstance(dist, DistInfoDistribution) and dist.has_metadata("METADATA"):
|
||||
metadata = dist.get_metadata("METADATA")
|
||||
elif dist.has_metadata("PKG-INFO"):
|
||||
metadata = dist.get_metadata("PKG-INFO")
|
||||
|
||||
Reference in New Issue
Block a user