jazzband / pip-tools

A set of tools to keep your pinned Python dependencies fresh.
https://pip-tools.rtfd.io
BSD 3-Clause "New" or "Revised" License
7.73k stars 612 forks source link

There are incompatible versions in the resolved dependencies. #685

Closed elcolie closed 5 years ago

elcolie commented 6 years ago

There are incompatible versions in the resolved dependencies.

Environment Versions
  1. OSX 10.13.6
  2. Python version: 3.7.0
  3. pip version: pip 18.0 from /Users/sarit/.pyenv/versions/3.7.0/envs/talatphlu/lib/python3.7/site-packages/pip (python 3.7)
  4. pip-tools version: pip-compile, version 3.0.0
Steps to replicate

graph.in py2neo ipython-cypher pandas networkx python-igraph plotly

  1. pip-compile graph.in -o graph.txt
Expected result

Dependencies all are compiled to graph.txt Or program be able to give me some clue the tree of dependencies I have to solve

Actual result

Could not find a version that matches prompt-toolkit<2.0.0,<2.1.0,==1.0.15,>=1.0.0,>=2.0.0 Tried: 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.8, 0.9, 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.20, 0.21, 0.22, 0.23, 0.25, 0.26, 0.28, 0.30, 0.31, 0.32, 0.32, 0.33, 0.33, 0.34, 0.34, 0.35, 0.35, 0.36, 0.36, 0.37, 0.37, 0.38, 0.38, 0.39, 0.39, 0.40, 0.40, 0.41, 0.41, 0.42, 0.42, 0.43, 0.43, 0.44, 0.44, 0.45, 0.45, 0.46, 0.46, 0.47, 0.47, 0.48, 0.48, 0.49, 0.49, 0.50, 0.50, 0.51, 0.51, 0.52, 0.52, 0.53, 0.53, 0.54, 0.54, 0.55, 0.55, 0.56, 0.56, 0.57, 0.57, 0.58, 0.58, 0.59, 0.59, 0.60, 0.60, 1.0.0, 1.0.0, 1.0.1, 1.0.1, 1.0.2, 1.0.2, 1.0.3, 1.0.3, 1.0.4, 1.0.4, 1.0.5, 1.0.5, 1.0.6, 1.0.6, 1.0.7, 1.0.7, 1.0.8, 1.0.8, 1.0.9, 1.0.9, 1.0.10, 1.0.10, 1.0.13, 1.0.13, 1.0.14, 1.0.14, 1.0.15, 1.0.15, 2.0.1, 2.0.1, 2.0.2, 2.0.2, 2.0.3, 2.0.3, 2.0.4, 2.0.4 There are incompatible versions in the resolved dependencies.

vphilippon commented 6 years ago

Hello @elcolie,

Could you give the output of pip-compile graph.in -o graph.txt --verbose please?

Thanks!

elcolie commented 6 years ago
$ pip-compile graph.in -o graph.txt --verbose
Using indexes:
  https://pypi.org/simple

                          ROUND 1
Current constraints:
  ipython-cypher
  networkx
  pandas
  plotly
  py2neo
  python-igraph

Finding the best candidates:
  found candidate ipython-cypher==0.2.6 (constraint was <any>)
  found candidate networkx==2.2 (constraint was <any>)
  found candidate pandas==0.23.4 (constraint was <any>)
  found candidate plotly==3.3.0 (constraint was <any>)
  found candidate py2neo==4.1.0 (constraint was <any>)
  found candidate python-igraph==0.7.1.post6 (constraint was <any>)

Finding secondary dependencies:
  ipython-cypher==0.2.6     requires ipython>=1.0, neo4jrestclient>=2.1.0, prettytable
  plotly==3.3.0             requires decorator>=4.0.6, nbformat>=4.2, pytz, requests, retrying>=1.3.3, six
  py2neo==4.1.0             requires click>=2.0, colorama, ipykernel, jupyter_client, jupyter_console, neo4j-driver<1.7,>=1.6, neotime, prompt_toolkit==1.0.15, pygments>=2.0, pytest, traitlets>=4.1.0, urllib3[secure]<1.23,>=1.21.1
  python-igraph==0.7.1.post6 requires -
  pandas==0.23.4            requires numpy>=1.9.0, python-dateutil>=2.5.0, pytz>=2011k
  networkx==2.2             requires decorator>=4.3.0

New dependencies found in this round:
  adding ['click', '>=2.0', '[]']
  adding ['colorama', '', '[]']
  adding ['decorator', '>=4.0.6,>=4.3.0', '[]']
  adding ['ipykernel', '', '[]']
  adding ['ipython', '>=1.0', '[]']
  adding ['jupyter-client', '', '[]']
  adding ['jupyter-console', '', '[]']
  adding ['nbformat', '>=4.2', '[]']
  adding ['neo4j-driver', '<1.7,>=1.6', '[]']
  adding ['neo4jrestclient', '>=2.1.0', '[]']
  adding ['neotime', '', '[]']
  adding ['numpy', '>=1.9.0', '[]']
  adding ['prettytable', '', '[]']
  adding ['prompt-toolkit', '==1.0.15', '[]']
  adding ['pygments', '>=2.0', '[]']
  adding ['pytest', '', '[]']
  adding ['python-dateutil', '>=2.5.0', '[]']
  adding ['pytz', '>=2011k', '[]']
  adding ['requests', '', '[]']
  adding ['retrying', '>=1.3.3', '[]']
  adding ['six', '', '[]']
  adding ['traitlets', '>=4.1.0', '[]']
  adding ['urllib3', '<1.23,>=1.21.1', "['secure']"]
Removed dependencies in this round:
Unsafe dependencies in this round:
------------------------------------------------------------
Result of round 1: not stable

                          ROUND 2
Current constraints:
  click>=2.0
  colorama
  decorator>=4.0.6,>=4.3.0
  ipykernel
  ipython>=1.0
  ipython-cypher
  jupyter_client
  jupyter_console
  nbformat>=4.2
  neo4j-driver<1.7,>=1.6
  neo4jrestclient>=2.1.0
  neotime
  networkx
  numpy>=1.9.0
  pandas
  plotly
  prettytable
  prompt_toolkit==1.0.15
  py2neo
  pygments>=2.0
  pytest
  python-dateutil>=2.5.0
  python-igraph
  pytz>=2011k
  requests
  retrying>=1.3.3
  six
  traitlets>=4.1.0
  urllib3[secure]<1.23,>=1.21.1

Finding the best candidates:
  found candidate click==7.0 (constraint was >=2.0)
  found candidate colorama==0.3.9 (constraint was <any>)
  found candidate decorator==4.3.0 (constraint was >=4.0.6,>=4.3.0)
  found candidate ipykernel==5.0.0 (constraint was <any>)
  found candidate ipython==7.0.1 (constraint was >=1.0)
  found candidate ipython-cypher==0.2.6 (constraint was <any>)
  found candidate jupyter-client==5.2.3 (constraint was <any>)
  found candidate jupyter-console==5.2.0 (constraint was <any>)
  found candidate nbformat==4.4.0 (constraint was >=4.2)
  found candidate neo4j-driver==1.6.2 (constraint was >=1.6,<1.7)
  found candidate neo4jrestclient==2.1.1 (constraint was >=2.1.0)
  found candidate neotime==1.0.0 (constraint was <any>)
  found candidate networkx==2.2 (constraint was <any>)
  found candidate numpy==1.15.2 (constraint was >=1.9.0)
  found candidate pandas==0.23.4 (constraint was <any>)
  found candidate plotly==3.3.0 (constraint was <any>)
  found candidate prettytable==0.7.2 (constraint was <any>)
  found candidate prompt_toolkit==1.0.15 (constraint was ==1.0.15)
  found candidate py2neo==4.1.0 (constraint was <any>)
  found candidate pygments==2.2.0 (constraint was >=2.0)
  found candidate pytest==3.8.1 (constraint was <any>)
  found candidate python-dateutil==2.7.3 (constraint was >=2.5.0)
  found candidate python-igraph==0.7.1.post6 (constraint was <any>)
  found candidate pytz==2018.5 (constraint was >=2011k)
  found candidate requests==2.19.1 (constraint was <any>)
  found candidate retrying==1.3.3 (constraint was >=1.3.3)
  found candidate six==1.11.0 (constraint was <any>)
  found candidate traitlets==4.3.2 (constraint was >=4.1.0)
  found candidate urllib3[secure]==1.22 (constraint was >=1.21.1,<1.23)

Finding secondary dependencies:
  pandas==0.23.4            requires numpy>=1.9.0, python-dateutil>=2.5.0, pytz>=2011k
  decorator==4.3.0          requires -
  plotly==3.3.0             requires decorator>=4.0.6, nbformat>=4.2, pytz, requests, retrying>=1.3.3, six
  six==1.11.0               requires -
  colorama==0.3.9           requires -
  ipython==7.0.1            requires appnope; sys_platform == "darwin", backcall, decorator, jedi>=0.10, pexpect; sys_platform != "win32", pickleshare, prompt-toolkit<2.1.0,>=2.0.0, pygments, setuptools>=18.5, simplegeneric>0.8, traitlets>=4.2
  ipykernel==5.0.0          requires ipython>=5.0.0, jupyter-client, tornado>=4.2, traitlets>=4.1.0
  python-igraph==0.7.1.post6 requires -
  nbformat==4.4.0           requires ipython-genutils, jsonschema!=2.5.0,>=2.4, jupyter-core, traitlets>=4.1
  prompt_toolkit==1.0.15    requires six>=1.9.0, wcwidth
  jupyter-console==5.2.0    requires ipykernel, ipython, jupyter-client, prompt-toolkit<2.0.0,>=1.0.0, pygments
  py2neo==4.1.0             requires click>=2.0, colorama, ipykernel, jupyter_client, jupyter_console, neo4j-driver<1.7,>=1.6, neotime, prompt_toolkit==1.0.15, pygments>=2.0, pytest, traitlets>=4.1.0, urllib3[secure]<1.23,>=1.21.1
  ipython-cypher==0.2.6     requires ipython>=1.0, neo4jrestclient>=2.1.0, prettytable
  neotime==1.0.0            requires pytz, six
  python-dateutil==2.7.3    requires six>=1.5
  pygments==2.2.0           requires -
  neo4jrestclient==2.1.1    requires requests>=2.1.0
  requests==2.19.1          requires certifi>=2017.4.17, chardet<3.1.0,>=3.0.2, idna<2.8,>=2.5, urllib3<1.24,>=1.21.1
  pytest==3.8.1             requires atomicwrites>=1.0, attrs>=17.4.0, more-itertools>=4.0.0, pluggy>=0.7, py>=1.5.0, setuptools, six>=1.10.0
  urllib3[secure]==1.22     requires certifi; extra == "secure"
  prettytable==0.7.2        requires -
  traitlets==4.3.2          requires decorator, ipython-genutils, six
  click==7.0                requires -
  networkx==2.2             requires decorator>=4.3.0
  pytz==2018.5              requires -
  numpy==1.15.2             requires -
  jupyter-client==5.2.3     requires jupyter-core, python-dateutil>=2.1, pyzmq>=13, tornado>=4.1, traitlets
  retrying==1.3.3           requires six>=1.7.0
  neo4j-driver==1.6.2       requires neotime==1.0.0

New dependencies found in this round:
  adding ['appnope', '', '[]']
  adding ['atomicwrites', '>=1.0', '[]']
  adding ['attrs', '>=17.4.0', '[]']
  adding ['backcall', '', '[]']
  adding ['certifi', '>=2017.4.17', '[]']
  adding ['chardet', '<3.1.0,>=3.0.2', '[]']
  adding ['idna', '<2.8,>=2.5', '[]']
  adding ['ipython', '>=1.0,>=5.0.0', '[]']
  adding ['ipython-genutils', '', '[]']
  adding ['jedi', '>=0.10', '[]']
  adding ['jsonschema', '!=2.5.0,>=2.4', '[]']
  adding ['jupyter-core', '', '[]']
  adding ['more-itertools', '>=4.0.0', '[]']
  adding ['neotime', '==1.0.0', '[]']
  adding ['pexpect', '', '[]']
  adding ['pickleshare', '', '[]']
  adding ['pluggy', '>=0.7', '[]']
  adding ['prompt-toolkit', '<2.0.0,<2.1.0,==1.0.15,>=1.0.0,>=2.0.0', '[]']
  adding ['py', '>=1.5.0', '[]']
  adding ['python-dateutil', '>=2.1,>=2.5.0', '[]']
  adding ['pyzmq', '>=13', '[]']
  adding ['requests', '>=2.1.0', '[]']
  adding ['simplegeneric', '>0.8', '[]']
  adding ['six', '>=1.10.0,>=1.5,>=1.7.0,>=1.9.0', '[]']
  adding ['tornado', '>=4.1,>=4.2', '[]']
  adding ['traitlets', '>=4.1,>=4.1.0,>=4.2', '[]']
  adding ['urllib3', '<1.23,<1.24,>=1.21.1', "['secure']"]
  adding ['wcwidth', '', '[]']
Removed dependencies in this round:
  removing ['ipython', '>=1.0', '[]']
  removing ['neotime', '', '[]']
  removing ['prompt-toolkit', '==1.0.15', '[]']
  removing ['python-dateutil', '>=2.5.0', '[]']
  removing ['requests', '', '[]']
  removing ['six', '', '[]']
  removing ['traitlets', '>=4.1.0', '[]']
  removing ['urllib3', '<1.23,>=1.21.1', "['secure']"]
Unsafe dependencies in this round:
------------------------------------------------------------
Result of round 2: not stable

                          ROUND 3
Current constraints:
  appnope
  atomicwrites>=1.0
  attrs>=17.4.0
  backcall
  certifi>=2017.4.17
  chardet<3.1.0,>=3.0.2
  click>=2.0
  colorama
  decorator>=4.0.6,>=4.3.0
  idna<2.8,>=2.5
  ipykernel
  ipython>=1.0,>=5.0.0
  ipython-cypher
  ipython-genutils
  jedi>=0.10
  jsonschema!=2.5.0,>=2.4
  jupyter-client
  jupyter_console
  jupyter-core
  more-itertools>=4.0.0
  nbformat>=4.2
  neo4j-driver<1.7,>=1.6
  neo4jrestclient>=2.1.0
  neotime==1.0.0
  networkx
  numpy>=1.9.0
  pandas
  pexpect
  pickleshare
  plotly
  pluggy>=0.7
  prettytable
  prompt-toolkit<2.0.0,<2.1.0,==1.0.15,>=1.0.0,>=2.0.0
  py>=1.5.0
  py2neo
  pygments>=2.0
  pytest
  python-dateutil>=2.1,>=2.5.0
  python-igraph
  pytz>=2011k
  pyzmq>=13
  requests>=2.1.0
  retrying>=1.3.3
  simplegeneric>0.8
  six>=1.10.0,>=1.5,>=1.7.0,>=1.9.0
  tornado>=4.1,>=4.2
  traitlets>=4.1,>=4.1.0,>=4.2
  urllib3[secure]<1.23,<1.24,>=1.21.1
  wcwidth

Finding the best candidates:
  found candidate appnope==0.1.0 (constraint was <any>)
  found candidate atomicwrites==1.2.1 (constraint was >=1.0)
  found candidate attrs==18.2.0 (constraint was >=17.4.0)
  found candidate backcall==0.1.0 (constraint was <any>)
  found candidate certifi==2018.8.24 (constraint was >=2017.4.17)
  found candidate chardet==3.0.4 (constraint was >=3.0.2,<3.1.0)
  found candidate click==7.0 (constraint was >=2.0)
  found candidate colorama==0.3.9 (constraint was <any>)
  found candidate decorator==4.3.0 (constraint was >=4.0.6,>=4.3.0)
  found candidate idna==2.7 (constraint was >=2.5,<2.8)
  found candidate ipykernel==5.0.0 (constraint was <any>)
  found candidate ipython==7.0.1 (constraint was >=1.0,>=5.0.0)
  found candidate ipython-cypher==0.2.6 (constraint was <any>)
  found candidate ipython-genutils==0.2.0 (constraint was <any>)
  found candidate jedi==0.12.1 (constraint was >=0.10)
  found candidate jsonschema==2.6.0 (constraint was >=2.4,!=2.5.0)
  found candidate jupyter-client==5.2.3 (constraint was <any>)
  found candidate jupyter-console==5.2.0 (constraint was <any>)
  found candidate jupyter-core==4.4.0 (constraint was <any>)
  found candidate more-itertools==4.3.0 (constraint was >=4.0.0)
  found candidate nbformat==4.4.0 (constraint was >=4.2)
  found candidate neo4j-driver==1.6.2 (constraint was >=1.6,<1.7)
  found candidate neo4jrestclient==2.1.1 (constraint was >=2.1.0)
  found candidate neotime==1.0.0 (constraint was ==1.0.0)
  found candidate networkx==2.2 (constraint was <any>)
  found candidate numpy==1.15.2 (constraint was >=1.9.0)
  found candidate pandas==0.23.4 (constraint was <any>)
  found candidate pexpect==4.6.0 (constraint was <any>)
  found candidate pickleshare==0.7.5 (constraint was <any>)
  found candidate plotly==3.3.0 (constraint was <any>)
  found candidate pluggy==0.7.1 (constraint was >=0.7)
  found candidate prettytable==0.7.2 (constraint was <any>)
Could not find a version that matches prompt-toolkit<2.0.0,<2.1.0,==1.0.15,>=1.0.0,>=2.0.0
Tried: 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.8, 0.9, 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.20, 0.21, 0.22, 0.23, 0.25, 0.26, 0.28, 0.30, 0.31, 0.32, 0.32, 0.33, 0.33, 0.34, 0.34, 0.35, 0.35, 0.36, 0.36, 0.37, 0.37, 0.38, 0.38, 0.39, 0.39, 0.40, 0.40, 0.41, 0.41, 0.42, 0.42, 0.43, 0.43, 0.44, 0.44, 0.45, 0.45, 0.46, 0.46, 0.47, 0.47, 0.48, 0.48, 0.49, 0.49, 0.50, 0.50, 0.51, 0.51, 0.52, 0.52, 0.53, 0.53, 0.54, 0.54, 0.55, 0.55, 0.56, 0.56, 0.57, 0.57, 0.58, 0.58, 0.59, 0.59, 0.60, 0.60, 1.0.0, 1.0.0, 1.0.1, 1.0.1, 1.0.2, 1.0.2, 1.0.3, 1.0.3, 1.0.4, 1.0.4, 1.0.5, 1.0.5, 1.0.6, 1.0.6, 1.0.7, 1.0.7, 1.0.8, 1.0.8, 1.0.9, 1.0.9, 1.0.10, 1.0.10, 1.0.13, 1.0.13, 1.0.14, 1.0.14, 1.0.15, 1.0.15, 2.0.1, 2.0.1, 2.0.2, 2.0.2, 2.0.3, 2.0.3, 2.0.4, 2.0.4
There are incompatible versions in the resolved dependencies.

After I check verbose. I tried install one by one. No error raises and here is my pip freeze

$ pip freeze
appnope==0.1.0
atomicwrites==1.2.1
attrs==18.2.0
backcall==0.1.0
certifi==2018.8.24
chardet==3.0.4
Click==7.0
colorama==0.3.9
decorator==4.3.0
idna==2.7
ipykernel==5.0.0
ipython==7.0.1
ipython-cypher==0.2.6
ipython-genutils==0.2.0
jedi==0.12.1
jsonschema==2.6.0
jupyter-client==5.2.3
jupyter-console==5.2.0
jupyter-core==4.4.0
more-itertools==4.3.0
nbformat==4.4.0
neo4j-driver==1.6.2
neo4jrestclient==2.1.1
neotime==1.0.0
networkx==2.2
numpy==1.15.2
pandas==0.23.4
parso==0.3.1
pexpect==4.6.0
pickleshare==0.7.5
pip-tools==3.0.0
plotly==3.3.0
pluggy==0.7.1
prettytable==0.7.2
prompt-toolkit==1.0.15
ptyprocess==0.6.0
py==1.6.0
py2neo==4.1.0
Pygments==2.2.0
pytest==3.8.1
python-dateutil==2.7.3
python-igraph==0.7.1.post6
pytz==2018.5
pyzmq==17.1.2
requests==2.19.1
retrying==1.3.3
simplegeneric==0.8.1
six==1.11.0
tornado==5.1.1
traitlets==4.3.2
urllib3==1.22
wcwidth==0.1.7
suutari-ai commented 6 years ago

I think you found two distinct bugs with this:

  1. In Pip. It shouldn't allow you to install ipython==7.0.1 with prompt-toolkit==1.0.15, since ipython's requirements specify prompt-toolkit<2.1.0,>=2.0.0.
  2. In Pip-tools. The pip-tools resolver should be able to find a set of packages that matches your requirements input specifications in the graph.in, since there is one.

    • To prove that there is an existing resolution to the given graph.in, try adding ipython<7 line to your graph.in and rerun pip-compile. At least on my machine, that resolves to a set of packages without any version conflicts present.

Implementing a resolver that could find the resolution automatically is not trivial though. There are some resolver implementations which do that kind of stuff, like libsolv, but that isn't available as a pure Python package AFAIK.

vphilippon commented 5 years ago

As @suutari-ai mentionned, pip-tools behaved as expected, taking into account that it doesn't perform backtracking, and the user has to investigate the conflict and take action. Having a better resolver would be awesome, but is project out of reach at the moment.

The solution here is to investigate the verbose output, as @suutari-ai did, as spot there's a conflict on prompt-toolkit, where

And from there, check if an earlier version of ipython supports prompt-toolkit<2.0.0, or if an earlier version of jupyter-console supports prompt-toolkit>=2.0.0 (usually, you have more chances of previous versions supporting older versions, so checking to downgrade ipython is the most likely to yield a valid solution).

Another option after that is to check if contributions can be made to make jupyter-console next version compatible with prompt-toolkit>=2.0.0 to move forward, but I'm going past finding a valid set of constrains here 😄

I'll go ahead and close the issue. Cheers!