diff --git a/pipenv/vendor/requirementslib/models/requirements.py b/pipenv/vendor/requirementslib/models/requirements.py index 1f91923687..ece16dc26d 100644 --- a/pipenv/vendor/requirementslib/models/requirements.py +++ b/pipenv/vendor/requirementslib/models/requirements.py @@ -34,7 +34,7 @@ from pipenv.patched.pip._internal.req.req_install import InstallRequirement from pipenv.patched.pip._internal.utils.temp_dir import global_tempdir_manager from pipenv.patched.pip._internal.utils.urls import path_to_url, url_to_path -from pipenv.patched.pip._vendor.distlib.util import cached_property +from pipenv.patched.pip._vendor.distlib.util import cached_property, COMPARE_OP 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 ( @@ -2551,6 +2551,10 @@ def from_pipfile(cls, name, pipfile): if hasattr(pipfile, "keys"): _pipfile = dict(pipfile).copy() _pipfile["version"] = get_version(pipfile) + + # We ensure version contains an operator. Default to equals (==) + if _pipfile["version"] and COMPARE_OP.match(_pipfile["version"]) is None: + _pipfile["version"] = "=={}".format(_pipfile["version"]) vcs = next(iter([vcs for vcs in VCS_LIST if vcs in _pipfile]), None) if vcs: _pipfile["vcs"] = vcs diff --git a/tests/integration/test_install_basic.py b/tests/integration/test_install_basic.py index afd0bd998e..5a5b2b2a9c 100644 --- a/tests/integration/test_install_basic.py +++ b/tests/integration/test_install_basic.py @@ -92,6 +92,23 @@ def test_install_without_dev(pipenv_instance_private_pypi): @pytest.mark.basic @pytest.mark.install +def test_install_with_version_req_default_operator(pipenv_instance_pypi): + """Ensure that running `pipenv install` work when spec is package = "X.Y.Z". """ + with pipenv_instance_pypi(chdir=True) as p: + with open(p.pipfile_path, "w") as f: + contents = """ +[packages] +fastapi = "0.95.0" + """.strip() + f.write(contents) + c = p.pipenv("install") + assert c.returncode == 0 + assert "fastapi" in p.pipfile["packages"] + + +@pytest.mark.basic +@pytest.mark.install +@pytest.mark.resolver def test_install_without_dev_section(pipenv_instance_pypi): with pipenv_instance_pypi() as p: with open(p.pipfile_path, "w") as f: