Open ifplusor opened 8 months ago
This almost sounds like a bug in the underlying pip-tools. I wonder if a newer version would not have this issue. Unfortunately I do not have access to this package (vanusai-common) so I'm not sure how to best go about reproducing this. Do you believe you could create a repro case?
I do more testing and upload a repro repo.
Maybe the issue depends on the order of local projects in requirements_file_in
passed to pip-compile
. It is ok when listed by correct topological order, otherwise it is wrong.
In my case, it reports an error when the requirements_file_in
is:
-e file:.
-e file:projecta
-e file:projectc
-e file:projectb[pandas]
But after I modify it as below, it is ok.
-e file:.
-e file:projecta
-e file:projectb[pandas]
-e file:projectc
I do more testing and upload a repro repo. Maybe the issue depends on the order of local projects in
requirements_file_in
passed topip-compile
. It is ok when listed by correct topological order, otherwise it is wrong.In my case, it reports an error when the
requirements_file_in
is:-e file:. -e file:projecta -e file:projectc -e file:projectb[pandas]
But after I modify it as below, it is ok.
-e file:. -e file:projecta -e file:projectb[pandas] -e file:projectc
I'm sorry, the above is another issue.
You can see the original case after replacing projectb
with projectb[pandas]
as dependent in projectc
.
projectc
depends on projectb[pandas]
, and projectb
depends on projecta
. -e file:projectb[pandas]
appears in requirements_file_in
but -e file:projecta
not.
Run rye lock --update-all --all-features
, you can see below error:
Traceback (most recent call last):
File "/Users/james/.rye/pip-tools/cpython@3.11/lib/python3.11/site-packages/pip/_vendor/resolvelib/resolvers.py", line 316, in _backjump
name, candidate = broken_state.mapping.popitem()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyError: 'dictionary is empty'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/james/.rye/pip-tools/cpython@3.11/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 92, in resolve
result = self._result = resolver.resolve(
^^^^^^^^^^^^^^^^^
File "/Users/james/.rye/pip-tools/cpython@3.11/lib/python3.11/site-packages/pip/_vendor/resolvelib/resolvers.py", line 546, in resolve
state = resolution.resolve(requirements, max_rounds=max_rounds)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/james/.rye/pip-tools/cpython@3.11/lib/python3.11/site-packages/pip/_vendor/resolvelib/resolvers.py", line 434, in resolve
success = self._backjump(causes)
^^^^^^^^^^^^^^^^^^^^^^
File "/Users/james/.rye/pip-tools/cpython@3.11/lib/python3.11/site-packages/pip/_vendor/resolvelib/resolvers.py", line 318, in _backjump
raise ResolutionImpossible(causes)
pip._vendor.resolvelib.resolvers.ResolutionImpossible: [RequirementInformation(requirement=SpecifierRequirement('projecta>=0.1.0; extra == "pandas"'), parent=ExtrasCandidate(base=EditableCandidate('file:///projectb'), extras=frozenset({'pandas'})))]
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/james/.rye/pip-tools/cpython@3.11/bin/pip-compile", line 8, in <module>
sys.exit(cli())
^^^^^
File "/Users/james/.rye/pip-tools/cpython@3.11/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/james/.rye/pip-tools/cpython@3.11/lib/python3.11/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/Users/james/.rye/pip-tools/cpython@3.11/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/james/.rye/pip-tools/cpython@3.11/lib/python3.11/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/james/.rye/pip-tools/cpython@3.11/lib/python3.11/site-packages/click/decorators.py", line 33, in new_func
return f(get_current_context(), *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/james/.rye/pip-tools/cpython@3.11/lib/python3.11/site-packages/piptools/scripts/compile.py", line 592, in cli
results = resolver.resolve(max_rounds=max_rounds)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/james/.rye/pip-tools/cpython@3.11/lib/python3.11/site-packages/piptools/resolver.py", line 593, in resolve
is_resolved = self._do_resolve(
^^^^^^^^^^^^^^^^^
File "/Users/james/.rye/pip-tools/cpython@3.11/lib/python3.11/site-packages/piptools/resolver.py", line 625, in _do_resolve
resolver.resolve(
File "/Users/james/.rye/pip-tools/cpython@3.11/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 101, in resolve
raise error from e
pip._internal.exceptions.DistributionNotFound: No matching distribution found for projecta>=0.1.0; extra == "pandas"
Steps to Reproduce
A project depends on another project with extra in the workspace.
Expected Result
run
rye lock
successfully.Actual Result
rye show
run
rye lock --update-all --all-features -v
req_file
forgenerate_lockfile
Version Info
rye 0.16.0 commit: 0.16.0 (c003223d5 2023-12-16) platform: macos (aarch64) self-python: cpython@3.11 symlink support: true
Stacktrace