Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pipenv lock nondeterminism with environment markers #4967

Closed
jfly opened this issue Feb 22, 2022 · 5 comments
Closed

pipenv lock nondeterminism with environment markers #4967

jfly opened this issue Feb 22, 2022 · 5 comments
Labels
Category: Pip Requires pip update to address Type: Bug 🐛 This issue is a bug.

Comments

@jfly
Copy link
Contributor

jfly commented Feb 22, 2022

Issue description

I'm seeing behavior where repeated pipenv locks produces different Pipfile.locks.

One way to reproduce this problem is with a Pipfile that depends on both gevent and sqlalchemy: example Pipfile.

gevent and sqlalchemy both depend on greenlet, but they use different environment markers:

Actual result

I haven't really dug into the pipenv source code to understand the source of the nondeterminism, but if you look at the pipenv lock --verbose, you can see that one example starts with Reporter.adding_requirement(SpecifierRequirement('gevent'), None), and the other starts with Reporter.adding_requirement(SpecifierRequirement('sqlalchemy'), None). I'm not sure what the source of that difference in behavior is (perhaps things are getting put in a Python set, and then getting iterated over, and python doesn't make any promises about the order of iteration there?)

Lock produces greenlet with gevent's markers
$ reset; pipenv lock --clear; rm -f Pipfile.lock; pipenv lock --verbose
Courtesy Notice: Pipenv found itself running within a virtual environment, so it will automatically use that environment, instead of creating its own for any project. You can set PIPENV_IGNORE_VIRTUALENVS=1 to force pipenv to ignore that environment and create its own instead. You can set PIPENV_VERBOSITY=-1 to suppress this warning.
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Updated Pipfile.lock (4a8c07)!
Courtesy Notice: Pipenv found itself running within a virtual environment, so it will automatically use that environment, instead of creating its own for any project. You can set PIPENV_IGNORE_VIRTUALENVS=1 to force pipenv to ignore that environment and create its own instead. You can set PIPENV_VERBOSITY=-1 to suppress this warning.
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
Reporter.starting()
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting()
Reporter.adding_requirement(SpecifierRequirement('gevent'), None)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('gevent'), None)
Reporter.adding_requirement(SpecifierRequirement('sqlalchemy'), None)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('sqlalchemy'), None)
Reporter.starting_round(0)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting_round(0)
Reporter.adding_requirement(SpecifierRequirement('zope.event'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('zope.event'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
Reporter.adding_requirement(SpecifierRequirement('greenlet<2.0,>=1.1.0; platform_python_implementation == "CPython"'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('greenlet<2.0,>=1.1.0; platform_python_implementation == "CPython"'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
Reporter.adding_requirement(SpecifierRequirement('zope.interface'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('zope.interface'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
Reporter.adding_requirement(SpecifierRequirement('setuptools'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('setuptools'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
Reporter.ending_round(0, state)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.ending_round(0, state)
Reporter.starting_round(1)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting_round(1)
Reporter.adding_requirement(SpecifierRequirement('greenlet!=0.4.17; python_version >= "3" and (platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32"))))))'), LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('greenlet!=0.4.17; python_version >= "3" and (platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32"))))))'), LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)'))
Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)'))
Reporter.ending_round(1, state)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.ending_round(1, state)
Reporter.starting_round(2)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting_round(2)
Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/d4/00/7474a1f27efa5c023fe114d84801fe2ded66db2fa5e72253d698b9a95a2a/greenlet-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b (from https://pypi.org/simple/greenlet/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/d4/00/7474a1f27efa5c023fe114d84801fe2ded66db2fa5e72253d698b9a95a2a/greenlet-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b (from https://pypi.org/simple/greenlet/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*)'))
Reporter.ending_round(2, state)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.ending_round(2, state)
Reporter.starting_round(3)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting_round(3)
Reporter.adding_requirement(SpecifierRequirement('setuptools'), LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('setuptools'), LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)'))
Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)'))
Reporter.ending_round(3, state)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.ending_round(3, state)
Reporter.starting_round(4)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting_round(4)
Reporter.adding_requirement(SpecifierRequirement('setuptools'), LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('setuptools'), LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)'))
Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)'))
Reporter.ending_round(4, state)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.ending_round(4, state)
Reporter.starting_round(5)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting_round(5)
Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/3b/02/8d4d27b1cacaac2d129a27d17a22d92a2a5eedcb7817d4ed8ab0d4daf5c4/setuptools-60.9.3-py3-none-any.whl#sha256=e4f30b9f84e5ab3decf945113119649fec09c1fc3507c6ebffec75646c56e62b (from https://pypi.org/simple/setuptools/) (requires-python:>=3.7)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/3b/02/8d4d27b1cacaac2d129a27d17a22d92a2a5eedcb7817d4ed8ab0d4daf5c4/setuptools-60.9.3-py3-none-any.whl#sha256=e4f30b9f84e5ab3decf945113119649fec09c1fc3507c6ebffec75646c56e62b (from https://pypi.org/simple/setuptools/) (requires-python:>=3.7)'))
Reporter.ending_round(5, state)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.ending_round(5, state)
Reporter.starting_round(6)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting_round(6)
Reporter.ending(State(mapping=OrderedDict([('gevent', LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)')), ('sqlalchemy', LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)')), ('greenlet', LinkCandidate('https://files.pythonhosted.org/packages/d4/00/7474a1f27efa5c023fe114d84801fe2ded66db2fa5e72253d698b9a95a2a/greenlet-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b (from https://pypi.org/simple/greenlet/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*)')), ('zope-event', LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)')), ('zope-interface', LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)')), ('setuptools', LinkCandidate('https://files.pythonhosted.org/packages/3b/02/8d4d27b1cacaac2d129a27d17a22d92a2a5eedcb7817d4ed8ab0d4daf5c4/setuptools-60.9.3-py3-none-any.whl#sha256=e4f30b9f84e5ab3decf945113119649fec09c1fc3507c6ebffec75646c56e62b (from https://pypi.org/simple/setuptools/) (requires-python:>=3.7)'))]), criteria={'gevent': Criterion((SpecifierRequirement('gevent'), via=None)), 'sqlalchemy': Criterion((SpecifierRequirement('sqlalchemy'), via=None)), 'zope-event': Criterion((SpecifierRequirement('zope.event'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))), 'greenlet': Criterion((SpecifierRequirement('greenlet<2.0,>=1.1.0; platform_python_implementation == "CPython"'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)')), (SpecifierRequirement('greenlet!=0.4.17; python_version >= "3" and (platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32"))))))'), via=LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)'))), 'zope-interface': Criterion((SpecifierRequirement('zope.interface'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))), 'setuptools': Criterion((SpecifierRequirement('setuptools'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)')), (SpecifierRequirement('setuptools'), via=LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)')), (SpecifierRequirement('setuptools'), via=LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)')))}))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.ending(State(mapping=OrderedDict([('gevent', LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)')), ('sqlalchemy', LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)')), ('greenlet', LinkCandidate('https://files.pythonhosted.org/packages/d4/00/7474a1f27efa5c023fe114d84801fe2ded66db2fa5e72253d698b9a95a2a/greenlet-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b (from https://pypi.org/simple/greenlet/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*)')), ('zope-event', LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)')), ('zope-interface', LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)')), ('setuptools', LinkCandidate('https://files.pythonhosted.org/packages/3b/02/8d4d27b1cacaac2d129a27d17a22d92a2a5eedcb7817d4ed8ab0d4daf5c4/setuptools-60.9.3-py3-none-any.whl#sha256=e4f30b9f84e5ab3decf945113119649fec09c1fc3507c6ebffec75646c56e62b (from https://pypi.org/simple/setuptools/) (requires-python:>=3.7)'))]), criteria={'gevent': Criterion((SpecifierRequirement('gevent'), via=None)), 'sqlalchemy': Criterion((SpecifierRequirement('sqlalchemy'), via=None)), 'zope-event': Criterion((SpecifierRequirement('zope.event'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))), 'greenlet': Criterion((SpecifierRequirement('greenlet<2.0,>=1.1.0; platform_python_implementation == "CPython"'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)')), (SpecifierRequirement('greenlet!=0.4.17; python_version >= "3" and (platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32"))))))'), via=LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)'))), 'zope-interface': Criterion((SpecifierRequirement('zope.interface'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))), 'setuptools': Criterion((SpecifierRequirement('setuptools'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)')), (SpecifierRequirement('setuptools'), via=LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)')), (SpecifierRequirement('setuptools'), via=LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)')))}))
⠙ Locking...
✔ Success!
Updated Pipfile.lock (4a8c07)!

$ jq '.default.greenlet.markers' Pipfile.lock
"platform_python_implementation == 'CPython'"
Lock produces greenlet with sqlalchemy's markers
$ reset; pipenv lock --clear; rm -f Pipfile.lock; pipenv lock --verbose
Courtesy Notice: Pipenv found itself running within a virtual environment, so it will automatically use that environment, instead of creating its own for any project. You can set PIPENV_IGNORE_VIRTUALENVS=1 to force pipenv to ignore that environment and create its own instead. You can set PIPENV_VERBOSITY=-1 to suppress this warning.
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Updated Pipfile.lock (4a8c07)!
Courtesy Notice: Pipenv found itself running within a virtual environment, so it will automatically use that environment, instead of creating its own for any project. You can set PIPENV_IGNORE_VIRTUALENVS=1 to force pipenv to ignore that environment and create its own instead. You can set PIPENV_VERBOSITY=-1 to suppress this warning.
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
Reporter.starting()
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting()
Reporter.adding_requirement(SpecifierRequirement('sqlalchemy'), None)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('sqlalchemy'), None)
Reporter.adding_requirement(SpecifierRequirement('gevent'), None)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('gevent'), None)
Reporter.starting_round(0)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting_round(0)
Reporter.adding_requirement(SpecifierRequirement('greenlet!=0.4.17; python_version >= "3" and (platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32"))))))'), LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('greenlet!=0.4.17; python_version >= "3" and (platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32"))))))'), LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)'))
Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)'))
Reporter.ending_round(0, state)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.ending_round(0, state)
Reporter.starting_round(1)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting_round(1)
Reporter.adding_requirement(SpecifierRequirement('zope.interface'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('zope.interface'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
Reporter.adding_requirement(SpecifierRequirement('greenlet<2.0,>=1.1.0; platform_python_implementation == "CPython"'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('greenlet<2.0,>=1.1.0; platform_python_implementation == "CPython"'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
Reporter.adding_requirement(SpecifierRequirement('zope.event'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('zope.event'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
Reporter.adding_requirement(SpecifierRequirement('setuptools'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('setuptools'), LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))
Reporter.ending_round(1, state)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.ending_round(1, state)
Reporter.starting_round(2)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting_round(2)
Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/d4/00/7474a1f27efa5c023fe114d84801fe2ded66db2fa5e72253d698b9a95a2a/greenlet-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b (from https://pypi.org/simple/greenlet/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/d4/00/7474a1f27efa5c023fe114d84801fe2ded66db2fa5e72253d698b9a95a2a/greenlet-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b (from https://pypi.org/simple/greenlet/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*)'))
Reporter.ending_round(2, state)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.ending_round(2, state)
Reporter.starting_round(3)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting_round(3)
Reporter.adding_requirement(SpecifierRequirement('setuptools'), LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('setuptools'), LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)'))
Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)'))
Reporter.ending_round(3, state)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.ending_round(3, state)
Reporter.starting_round(4)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting_round(4)
Reporter.adding_requirement(SpecifierRequirement('setuptools'), LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.adding_requirement(SpecifierRequirement('setuptools'), LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)'))
Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)'))
Reporter.ending_round(4, state)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.ending_round(4, state)
Reporter.starting_round(5)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting_round(5)
Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/3b/02/8d4d27b1cacaac2d129a27d17a22d92a2a5eedcb7817d4ed8ab0d4daf5c4/setuptools-60.9.3-py3-none-any.whl#sha256=e4f30b9f84e5ab3decf945113119649fec09c1fc3507c6ebffec75646c56e62b (from https://pypi.org/simple/setuptools/) (requires-python:>=3.7)'))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.pinning(LinkCandidate('https://files.pythonhosted.org/packages/3b/02/8d4d27b1cacaac2d129a27d17a22d92a2a5eedcb7817d4ed8ab0d4daf5c4/setuptools-60.9.3-py3-none-any.whl#sha256=e4f30b9f84e5ab3decf945113119649fec09c1fc3507c6ebffec75646c56e62b (from https://pypi.org/simple/setuptools/) (requires-python:>=3.7)'))
Reporter.ending_round(5, state)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.ending_round(5, state)
Reporter.starting_round(6)
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.starting_round(6)
Reporter.ending(State(mapping=OrderedDict([('sqlalchemy', LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)')), ('gevent', LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)')), ('greenlet', LinkCandidate('https://files.pythonhosted.org/packages/d4/00/7474a1f27efa5c023fe114d84801fe2ded66db2fa5e72253d698b9a95a2a/greenlet-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b (from https://pypi.org/simple/greenlet/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*)')), ('zope-event', LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)')), ('zope-interface', LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)')), ('setuptools', LinkCandidate('https://files.pythonhosted.org/packages/3b/02/8d4d27b1cacaac2d129a27d17a22d92a2a5eedcb7817d4ed8ab0d4daf5c4/setuptools-60.9.3-py3-none-any.whl#sha256=e4f30b9f84e5ab3decf945113119649fec09c1fc3507c6ebffec75646c56e62b (from https://pypi.org/simple/setuptools/) (requires-python:>=3.7)'))]), criteria={'sqlalchemy': Criterion((SpecifierRequirement('sqlalchemy'), via=None)), 'gevent': Criterion((SpecifierRequirement('gevent'), via=None)), 'greenlet': Criterion((SpecifierRequirement('greenlet!=0.4.17; python_version >= "3" and (platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32"))))))'), via=LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)')), (SpecifierRequirement('greenlet<2.0,>=1.1.0; platform_python_implementation == "CPython"'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))), 'zope-interface': Criterion((SpecifierRequirement('zope.interface'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))), 'zope-event': Criterion((SpecifierRequirement('zope.event'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))), 'setuptools': Criterion((SpecifierRequirement('setuptools'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)')), (SpecifierRequirement('setuptools'), via=LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)')), (SpecifierRequirement('setuptools'), via=LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)')))}))
INFO:pipenv.patched.notpip._internal.resolution.resolvelib.reporter:Reporter.ending(State(mapping=OrderedDict([('sqlalchemy', LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)')), ('gevent', LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)')), ('greenlet', LinkCandidate('https://files.pythonhosted.org/packages/d4/00/7474a1f27efa5c023fe114d84801fe2ded66db2fa5e72253d698b9a95a2a/greenlet-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b (from https://pypi.org/simple/greenlet/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*)')), ('zope-event', LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)')), ('zope-interface', LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)')), ('setuptools', LinkCandidate('https://files.pythonhosted.org/packages/3b/02/8d4d27b1cacaac2d129a27d17a22d92a2a5eedcb7817d4ed8ab0d4daf5c4/setuptools-60.9.3-py3-none-any.whl#sha256=e4f30b9f84e5ab3decf945113119649fec09c1fc3507c6ebffec75646c56e62b (from https://pypi.org/simple/setuptools/) (requires-python:>=3.7)'))]), criteria={'sqlalchemy': Criterion((SpecifierRequirement('sqlalchemy'), via=None)), 'gevent': Criterion((SpecifierRequirement('gevent'), via=None)), 'greenlet': Criterion((SpecifierRequirement('greenlet!=0.4.17; python_version >= "3" and (platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32"))))))'), via=LinkCandidate('https://files.pythonhosted.org/packages/e6/15/739ade8af241b23e60d632d0efb49736bd22aa65f23ec595447085c5bd36/SQLAlchemy-1.4.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=d5c20c8415173b119762b6110af64448adccd4d11f273fb9f718a9865b88a99c (from https://pypi.org/simple/sqlalchemy/) (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)')), (SpecifierRequirement('greenlet<2.0,>=1.1.0; platform_python_implementation == "CPython"'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))), 'zope-interface': Criterion((SpecifierRequirement('zope.interface'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))), 'zope-event': Criterion((SpecifierRequirement('zope.event'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)'))), 'setuptools': Criterion((SpecifierRequirement('setuptools'), via=LinkCandidate('https://files.pythonhosted.org/packages/68/13/95b3272019d69984ba044c6783de5efea76b0d92c97d96bfe832ec7dc6fa/gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 (from https://pypi.org/simple/gevent/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5)')), (SpecifierRequirement('setuptools'), via=LinkCandidate('https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl#sha256=2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 (from https://pypi.org/simple/zope-event/)')), (SpecifierRequirement('setuptools'), via=LinkCandidate('https://files.pythonhosted.org/packages/e9/56/945a20c9efe2a5f68cc176b525131830c4392992ceccef91902d823de7ef/zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl#sha256=db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 (from https://pypi.org/simple/zope-interface/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*)')))}))
⠸ Locking...
✔ Success!
Updated Pipfile.lock (4a8c07)!

$ jq '.default.greenlet.markers' Pipfile.lock
"python_version >= '3' and (platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32'))))))"

Expected result

I'm pretty sure that in this case, sqlalchemy's markers should not be making it into the Pipfile.lock, but I don't really know how to interpret PEP 508 in the context of a tool like pipenv (PEP 508 seems to be written more from the perspective of a tool like pip, where the job is to install dependencies, and it actually makes sense to evaluate environment markers, because pip knows which machine it's installing dependencies on).

Either way, I'm confident that pipenv should behave deterministically: either always including those environment markers from sqlalchemy, or always not including those markers.

Steps to replicate

$ docker run $(docker build -q https://github.com/jfly/2022-02-22-pipenv-nondeterminism.git#main)
attempt 1: greenlet markers="python_version >= '3' and (platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32'))))))"
attempt 2: greenlet markers="platform_python_implementation == 'CPython'"
attempt 3: greenlet markers="platform_python_implementation == 'CPython'"
...

Workaround

This all seems to go away if I explicitly add greenlet as a top dependency:

$ diff --git a/Pipfile b/Pipfile
index a749f2e..985783f 100644
--- a/Pipfile
+++ b/Pipfile
@@ -3,4 +3,5 @@ python_version = "3.8"
 
 [packages]
 gevent = "*"
+greenlet = "*"
 sqlalchemy = "*"
$ docker run $(docker build . -q)
...
attempt 201: greenlet markers=null
attempt 202: greenlet markers=null
attempt 203: greenlet markers=null
attempt 204: greenlet markers=null
attempt 205: greenlet markers=null
@matteius
Copy link
Member

@jfly Thanks for your report! I have just did some triage of it and I agree with what you are saying that this affects latest published version 2022.1.8 based on my findings.

I don't really know how to interpret PEP 508 in the context of a tool like pipenv (PEP 508 seems to be written more from the perspective of a tool like pip, where the job is to install dependencies, and it actually makes sense to evaluate environment markers, because pip knows which machine it's installing dependencies on).

Pipenv relies on the internal resolve of pip ... I believe this is a bug in the pip 21.x series that is fixed in the pip 22,x series. The way this works for pipenv is it vendors in a fixed version of pip and related dependencies into pipenv because pipenv ususes the internal APIs of pip that are subject to changing and breakage.

I actually have a branch I have been working on that upgrades pipenv to pip 22.x but there are still 2 failing unit tests (not convinced they are real world failures based on my debugging) and the other issue is some of the changes are in the upstream vendor code (not many). That being said, I tried your example in both 2022.1.8 and my new branch here: https://github.com/pypa/pipenv/tree/vendor-pip-22.0.3-followup-changes

I generated the lock file fresh twice in each version and then diffed the files:

matteius@matteius-VirtualBox:~/shared-projects/pipenv-triage/pipenv-4967$ diff Pipfile.lock Pipfile.lock.new 

matteius@matteius-VirtualBox:~/shared-projects/pipenv-triage/pipenv-4967$ ls
Pipfile  Pipfile.lock  Pipfile.lock.new  Pipfile.lock.old  Pipfile.lock.old2

matteius@matteius-VirtualBox:~/shared-projects/pipenv-triage/pipenv-4967$ diff Pipfile.lock Pipfile.lock.old
116c116
<             "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
---
>             "markers": "python_version >= '3' and (platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32'))))))",
matteius@matteius-VirtualBox:~/shared-projects/pipenv-triage/pipenv-4967$ diff Pipfile.lock Pipfile.lock.old2
116c116
<             "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
---
>             "markers": "platform_python_implementation == 'CPython'",
matteius@matteius-VirtualBox:~/shared-projects/pipenv-triage/pipenv-4967$ diff Pipfile.lock.old Pipfile.lock.old2
116c116
<             "markers": "python_version >= '3' and (platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32'))))))",
---
>             "markers": "platform_python_implementation == 'CPython'",

Basically what that shows is the updated resolver in pip 22.x is yielding a consistent result between my two test runs where clearly the prior version did not. getting to pip 22.x would also fix some other resolver related bugs including the infinity lock bug as far as I can tell.

Won't be easy to get across the line in some respects, it means dropping support for python 3.6, and getting update to requirementslib, pipshims, and pip itself currently. If you have a chance, please take a look at that PR and give the branch a try if you have time to help validate if it improves the issue from your perspective. Thanks!

@matteius matteius added Category: Pip Requires pip update to address Type: Possible Bug This issue describes a possible bug in pipenv. labels Feb 24, 2022
@matteius
Copy link
Member

We will be dropping support for python3.6 soon, and there is a path forward to pip 22.x vendoring, so this will be fixed hopefully end of April or early May.

@matteius
Copy link
Member

Please check with pipenv==2022.4.20 and if its still an issue we can revisit, but I believe it should be resolved.

@jfly
Copy link
Contributor Author

jfly commented Apr 29, 2022

Sorry for the radio silence here. I just tried this with pipenv==2022.4.21, and it works like a charm. Thanks, @matteius!!

@jfly
Copy link
Contributor Author

jfly commented Aug 10, 2022

For the record, this bug seems to be occurring again. In fact, I think it never actually was fixed =( Since I don't have the power to re-open issues, I've filed #5239

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Category: Pip Requires pip update to address Type: Bug 🐛 This issue is a bug.
Projects
None yet
Development

No branches or pull requests

2 participants