diff --git a/news/4480.bugfix.rst b/news/4480.bugfix.rst new file mode 100644 index 00000000..78896328 --- /dev/null +++ b/news/4480.bugfix.rst @@ -0,0 +1 @@ +Fix a bug that dist-info inside ``venv`` directory will be mistaken as the editable package's metadata. diff --git a/news/4480.vendor.rst b/news/4480.vendor.rst new file mode 100644 index 00000000..3d91b498 --- /dev/null +++ b/news/4480.vendor.rst @@ -0,0 +1 @@ +Update ``requirementslib`` from ``1.5.13`` to ``1.5.14``. diff --git a/pipenv/vendor/requirementslib/__init__.py b/pipenv/vendor/requirementslib/__init__.py index 69b65738..f8561e23 100644 --- a/pipenv/vendor/requirementslib/__init__.py +++ b/pipenv/vendor/requirementslib/__init__.py @@ -10,7 +10,7 @@ from .models.lockfile import Lockfile from .models.pipfile import Pipfile from .models.requirements import Requirement -__version__ = "1.5.13" +__version__ = "1.5.14" logger = logging.getLogger(__name__) diff --git a/pipenv/vendor/requirementslib/models/setup_info.py b/pipenv/vendor/requirementslib/models/setup_info.py index 4a5fe771..324a714b 100644 --- a/pipenv/vendor/requirementslib/models/setup_info.py +++ b/pipenv/vendor/requirementslib/models/setup_info.py @@ -465,6 +465,18 @@ class ScandirCloser(object): pass +def _is_venv_dir(path): + # type: (AnyStr) -> bool + if os.name == "nt": + return os.path.isfile(os.path.join(path, "Scripts/python.exe")) or os.path.isfile( + os.path.join(path, "Scripts/activate") + ) + else: + return os.path.isfile(os.path.join(path, "bin/python")) or os.path.isfile( + os.path.join(path, "bin/activate") + ) + + def iter_metadata(path, pkg_name=None, metadata_type="egg-info"): # type: (AnyStr, Optional[AnyStr], AnyStr) -> Generator if pkg_name is not None: @@ -472,6 +484,9 @@ def iter_metadata(path, pkg_name=None, metadata_type="egg-info"): dirs_to_search = [path] while dirs_to_search: p = dirs_to_search.pop(0) + # Skip when the directory is like a venv + if _is_venv_dir(p): + continue with contextlib.closing(ScandirCloser(p)) as path_iterator: for entry in path_iterator: if entry.is_dir(): diff --git a/pipenv/vendor/vendor.txt b/pipenv/vendor/vendor.txt index 51942bfb..205e794c 100644 --- a/pipenv/vendor/vendor.txt +++ b/pipenv/vendor/vendor.txt @@ -26,7 +26,7 @@ requests==2.23.0 idna==2.9 urllib3==1.25.9 certifi==2020.4.5.1 -requirementslib==1.5.13 +requirementslib==1.5.14 attrs==19.3.0 distlib==0.3.0 packaging==20.3