Example error: ResolutionImpossible¶
What if there are user-provided pinned packages?¶
Where a user wants to install packages (with 1 or more pinned version) with default verbose level
$ pip install peach=1.0 apple=2.0
Due to conflicting dependencies pip cannot install Peach1.0 and Apple2.0:
* Peach 1.0 depends on Banana 3.0
* Apple2.0 depends on Banana2.0
There are a number of possible solutions. You can try:
1. removing package versions from your requirements, and letting pip try to resolve the problem for you
2. Trying a version of Peach that depends on Banana2.0. Try `pip-search peach —dep banana2.0`
3. replacing Apple or Peach with a different package altogether
4. patching Apple2.0 to use Banana3.0
5. force installing (Be aware!)
For instructions on how to do these steps visit: https://pypa.io/SomeLink
To debug this further you can run `pip-tree` to see all of your dependencies.
with verbose level -vv
If a user ran the same pip command with more verbosity, what would they see?
with verbose level -vvv
If a user ran the same pip command with more verbosity, what would they see?
What if there are no user-provided version restrictions?¶
NB: We are assuming this resolver behaviour gets implemented, based on GH issues 8249.
with default verbose level
$ pip install apple peach
Due to conflicting dependencies pip cannot install apple or peach. Both depend on banana, but pip can't find a version of either where they depend on the same banana version.
There are a number of possible solutions. You can try:
1. replacing apple or peach with a different package altogether
2. patching apple or peach to use the same version of banana
3. force installing (Be aware!)
To debug this further you can run pip-tree to see all of your dependencies.
with verbose level -vv
If a user ran the same pip command with more verbosity, what would they see?
with verbose level -vvv
If a user ran the same pip command with more verbosity, what would they see?
What should be in the “documentation” page?
ways to swap a package for another
how to patch a package to support a version (various ways)
Recommendations¶
Write official documentation / guide “How to resolve dependency conflicts” explaining:
Why conflicts can exist
How you can avoid them (pinning)
How you can resolve them
Use alternative package
Use older version
Patch package
Introduce new commands to pip, inspired by poetry:
Tree: Show full tree of dependencies
Show
<package>
Show details of a package, including it’s dependencieslatest - shows latest vs installed versions
outdated - shows only outdated versions
Expose commands / help link in output??
when particular issue happens provide ways to move on (ala pipenv), e.g.
run this command to see X
is it your internet connection?
is it the pypi website?
Aspirational commands
pip search PackageName —dep PackageNameVersion
a command that will search for a version of a package that has a dependency on another packageversion