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 fails to resolve subdependency when viable solution exists #2596

Closed
orf opened this issue Jul 17, 2018 · 42 comments
Closed

Pipenv fails to resolve subdependency when viable solution exists #2596

orf opened this issue Jul 17, 2018 · 42 comments
Labels
Category: Dependency Resolution Issue relates to dependency resolution. help wanted

Comments

@orf
Copy link

orf commented Jul 17, 2018

This is being worked on here: https://github.com/sarugaku/passa

Issue description

You have two projects:

.
├── base-proj
│   ├── Pipfile
│   └── Pipfile.lock
└── sub-package
    └── setup.py

2 directories, 3 files

The setup.py looks like this:

from setuptools import setup

setup(
    name='sub-package',
    version='0.1',
    install_requires=['tensorflow'],
)

And the Pipfile:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
tensorflow = "==1.8.0"

[dev-packages]

[requires]
python_version = "3.6"

From the base-proj directory, when you run pipenv install -e ../sub-package/, you get the following output:

Adding -e ../sub-package/ to Pipfile's [packages]...
Pipfile.lock (f43471) out of date, updating to (9beaad)...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.6.0rc0, 1.6.0rc0
There are incompatible versions in the resolved dependencies.
Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
Could not find a version that matches tensorboard<1.10.0,<1.9.0,>=1.8.0,>=1.9.0
Tried: 1.6.0, 1.6.0, 1.7.0, 1.7.0, 1.8.0, 1.8.0, 1.9.0, 1.9.0
Skipped pre-versions: 1.0.0a0, 1.0.0a0, 1.0.0a1, 1.0.0a1, 1.0.0a2, 1.0.0a2, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.6.0rc0, 1.6.0rc0
There are incompatible versions in the resolved dependencies.

How can Pipenv resolve tensorboard to '<1.10.0,<1.9.0,>=1.8.0,>=1.9.0'? It seems it is somehow pulling in the dependency tensorboard of tensorflow==1.9.0 and 1.8.0, and combining them.

Expected result

The tensorflow dependency lock in the main project seems to conflict with the one defined in the setup.py. Specifically the tensorboard sub-dependency seems to become immediately unsolvable (see lock --verbose output below).

Actual result

After running pipenv lock --verbose:

Locking [dev-packages] dependencies...
Locking [packages] dependencies...
using sources: [{'url': 'https://pypi.org/simple', 'verify_ssl': True, 'name': 'pypi'}]
Using pip: -i https://pypi.org/simple

                          ROUND 1                           
Current constraints:
  file:///Users/tom/projects/pipenv-test/sub-package (from -r /var/folders/9w/twrv54nd0v19gsbjhjs3mlhc0000gn/T/pipenv-btuknzld-requirements/pipenv-lxr0x3iq-constraints.txt (line 3))
  tensorflow==1.8.0 (from -r /var/folders/9w/twrv54nd0v19gsbjhjs3mlhc0000gn/T/pipenv-btuknzld-requirements/pipenv-lxr0x3iq-constraints.txt (line 2))

Finding the best candidates:
  found candidate -e file:///Users/tom/projects/pipenv-test/sub-package (constraint was <any>)
  found candidate tensorflow==1.8.0 (constraint was ==1.8.0)

Finding secondary dependencies:
  tensorflow==1.8.0         requires absl-py>=0.1.6, astor>=0.6.0, bleach==1.5.0, gast>=0.2.0, grpcio>=1.8.6, html5lib==0.9999999, markdown>=2.6.8, numpy>=1.13.3, protobuf>=3.4.0, setuptools, six>=1.10.0, tensorboard<1.9.0,>=1.8.0, tensorflow==1.8.0, termcolor>=1.1.0, werkzeug>=0.11.10, wheel>=0.26

New dependencies found in this round:
  adding ['absl-py', '>=0.1.6', '[]']
  adding ['astor', '>=0.6.0', '[]']
  adding ['bleach', '==1.5.0', '[]']
  adding ['gast', '>=0.2.0', '[]']
  adding ['grpcio', '>=1.8.6', '[]']
  adding ['html5lib', '==0.9999999', '[]']
  adding ['markdown', '>=2.6.8', '[]']
  adding ['numpy', '>=1.13.3', '[]']
  adding ['protobuf', '>=3.4.0', '[]']
  adding ['six', '>=1.10.0', '[]']
  adding ['sub-package', '==0.1', '[]']
  adding ['tensorboard', '<1.10.0,<1.9.0,>=1.8.0,>=1.9.0', '[]']
  adding ['tensorflow', '==1.8.0', '[]']
  adding ['termcolor', '>=1.1.0', '[]']
  adding ['werkzeug', '>=0.11.10', '[]']
  adding ['wheel', '>=0.26', '[]']
Removed dependencies in this round:
Unsafe dependencies in this round:
------------------------------------------------------------
Result of round 1: not stable

                          ROUND 2                           
Current constraints:
  absl-py>=0.1.6
  astor>=0.6.0
  bleach==1.5.0
  gast>=0.2.0
  grpcio>=1.8.6
  html5lib==0.9999999
  markdown>=2.6.8
  numpy>=1.13.3
  protobuf>=3.4.0
  six>=1.10.0
  sub-package==0.1 from file:///Users/tom/projects/pipenv-test/sub-package (from -r /var/folders/9w/twrv54nd0v19gsbjhjs3mlhc0000gn/T/pipenv-btuknzld-requirements/pipenv-lxr0x3iq-constraints.txt (line 3))
  tensorboard<1.10.0,<1.9.0,>=1.8.0,>=1.9.0
  tensorflow==1.8.0 (from -r /var/folders/9w/twrv54nd0v19gsbjhjs3mlhc0000gn/T/pipenv-btuknzld-requirements/pipenv-lxr0x3iq-constraints.txt (line 2))
  termcolor>=1.1.0
  werkzeug>=0.11.10
  wheel>=0.26

Finding the best candidates:
  found candidate absl-py==0.2.2 (constraint was >=0.1.6)
  found candidate astor==0.7.1 (constraint was >=0.6.0)
  found candidate bleach==1.5.0 (constraint was ==1.5.0)
  found candidate gast==0.2.0 (constraint was >=0.2.0)
  found candidate grpcio==1.13.0 (constraint was >=1.8.6)
  found candidate html5lib==0.9999999 (constraint was ==0.9999999)
  found candidate markdown==2.6.11 (constraint was >=2.6.8)
  found candidate numpy==1.14.5 (constraint was >=1.13.3)
  found candidate protobuf==3.6.0 (constraint was >=3.4.0)
  found candidate six==1.11.0 (constraint was >=1.10.0)
  found candidate -e file:///Users/tom/projects/pipenv-test/sub-package (constraint was ==0.1)
Using pip: -i https://pypi.org/simple

                          ROUND 1                           
Current constraints:
  file:///Users/tom/projects/pipenv-test/sub-package (from -r /var/folders/9w/twrv54nd0v19gsbjhjs3mlhc0000gn/T/pipenv-btuknzld-requirements/pipenv-f2vkysg2-constraints.txt (line 3))
  tensorflow==1.8.0 (from -r /var/folders/9w/twrv54nd0v19gsbjhjs3mlhc0000gn/T/pipenv-btuknzld-requirements/pipenv-f2vkysg2-constraints.txt (line 2))

Finding the best candidates:
  found candidate -e file:///Users/tom/projects/pipenv-test/sub-package (constraint was <any>)
  found candidate tensorflow==1.8.0 (constraint was ==1.8.0)

Finding secondary dependencies:
  tensorflow==1.8.0         requires absl-py>=0.1.6, astor>=0.6.0, bleach==1.5.0, gast>=0.2.0, grpcio>=1.8.6, html5lib==0.9999999, markdown>=2.6.8, numpy>=1.13.3, protobuf>=3.4.0, setuptools, six>=1.10.0, tensorboard<1.9.0,>=1.8.0, tensorflow==1.8.0, termcolor>=1.1.0, werkzeug>=0.11.10, wheel>=0.26

New dependencies found in this round:
  adding ['absl-py', '>=0.1.6', '[]']
  adding ['astor', '>=0.6.0', '[]']
  adding ['bleach', '==1.5.0', '[]']
  adding ['gast', '>=0.2.0', '[]']
  adding ['grpcio', '>=1.8.6', '[]']
  adding ['html5lib', '==0.9999999', '[]']
  adding ['markdown', '>=2.6.8', '[]']
  adding ['numpy', '>=1.13.3', '[]']
  adding ['protobuf', '>=3.4.0', '[]']
  adding ['six', '>=1.10.0', '[]']
  adding ['sub-package', '==0.1', '[]']
  adding ['tensorboard', '<1.10.0,<1.9.0,>=1.8.0,>=1.9.0', '[]']
  adding ['tensorflow', '==1.8.0', '[]']
  adding ['termcolor', '>=1.1.0', '[]']
  adding ['werkzeug', '>=0.11.10', '[]']
  adding ['wheel', '>=0.26', '[]']
Removed dependencies in this round:
Unsafe dependencies in this round:
------------------------------------------------------------
Result of round 1: not stable

                          ROUND 2                           
Current constraints:
  absl-py>=0.1.6
  astor>=0.6.0
  bleach==1.5.0
  gast>=0.2.0
  grpcio>=1.8.6
  html5lib==0.9999999
  markdown>=2.6.8
  numpy>=1.13.3
  protobuf>=3.4.0
  six>=1.10.0
  sub-package==0.1 from file:///Users/tom/projects/pipenv-test/sub-package (from -r /var/folders/9w/twrv54nd0v19gsbjhjs3mlhc0000gn/T/pipenv-btuknzld-requirements/pipenv-f2vkysg2-constraints.txt (line 3))
  tensorboard<1.10.0,<1.9.0,>=1.8.0,>=1.9.0
  tensorflow==1.8.0 (from -r /var/folders/9w/twrv54nd0v19gsbjhjs3mlhc0000gn/T/pipenv-btuknzld-requirements/pipenv-f2vkysg2-constraints.txt (line 2))
  termcolor>=1.1.0
  werkzeug>=0.11.10
  wheel>=0.26

Finding the best candidates:
  found candidate absl-py==0.2.2 (constraint was >=0.1.6)
  found candidate astor==0.7.1 (constraint was >=0.6.0)
  found candidate bleach==1.5.0 (constraint was ==1.5.0)
  found candidate gast==0.2.0 (constraint was >=0.2.0)
  found candidate grpcio==1.13.0 (constraint was >=1.8.6)
  found candidate html5lib==0.9999999 (constraint was ==0.9999999)
  found candidate markdown==2.6.11 (constraint was >=2.6.8)
  found candidate numpy==1.14.5 (constraint was >=1.13.3)
  found candidate protobuf==3.6.0 (constraint was >=3.4.0)
  found candidate six==1.11.0 (constraint was >=1.10.0)
  found candidate -e file:///Users/tom/projects/pipenv-test/sub-package (constraint was ==0.1)

Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
Could not find a version that matches tensorboard<1.10.0,<1.9.0,>=1.8.0,>=1.9.0
Tried: 1.6.0, 1.6.0, 1.7.0, 1.7.0, 1.8.0, 1.8.0, 1.9.0, 1.9.0
Skipped pre-versions: 1.0.0a0, 1.0.0a0, 1.0.0a1, 1.0.0a1, 1.0.0a2, 1.0.0a2, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.6.0rc0, 1.6.0rc0
There are incompatible versions in the resolved dependencies.
Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
Could not find a version that matches tensorboard<1.10.0,<1.9.0,>=1.8.0,>=1.9.0
Tried: 1.6.0, 1.6.0, 1.7.0, 1.7.0, 1.8.0, 1.8.0, 1.9.0, 1.9.0
Skipped pre-versions: 1.0.0a0, 1.0.0a0, 1.0.0a1, 1.0.0a1, 1.0.0a2, 1.0.0a2, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a3, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a4, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a5, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.0.0a6, 1.6.0rc0, 1.6.0rc0
There are incompatible versions in the resolved dependencies.
Steps to replicate

Provide the steps to replicate (which usually at least includes the commands and the Pipfile).


$ pipenv --support

Pipenv version: '2018.7.1'

Pipenv location: '/usr/local/Cellar/pipenv/2018.7.1/libexec/lib/python3.7/site-packages/pipenv'

Python location: '/usr/local/Cellar/pipenv/2018.7.1/libexec/bin/python3.7'

Other Python installations in PATH:

  • 2.7: /usr/local/bin/python2.7

  • 2.7: /usr/local/bin/python2.7

  • 2.7: /usr/bin/python2.7

  • 3.6: /Users/tom/.pyenv/shims/python3.6m

  • 3.6: /Users/tom/.local/share/virtualenvs/base-proj-lBpX7WJ2/bin/python3.6

  • 3.6: /Users/tom/.pyenv/shims/python3.6

  • 3.6: /Users/tom/.pyenv/shims/python3.6

  • 3.7: /usr/local/bin/python3.7m

  • 3.7: /usr/local/bin/python3.7

  • 3.6.5: /Users/tom/.local/share/virtualenvs/base-proj-lBpX7WJ2/bin/python

  • 3.6.5: /Users/tom/.pyenv/shims/python

  • 3.6.5: /Users/tom/.pyenv/shims/python

  • 2.7.15: /usr/local/bin/python

  • 2.7.10: /usr/bin/python

  • 2.7.15: /usr/local/bin/python2

  • 3.6.5: /Users/tom/.local/share/virtualenvs/base-proj-lBpX7WJ2/bin/python3

  • 3.6.5: /Users/tom/.pyenv/shims/python3

  • 3.6.5: /Users/tom/.pyenv/shims/python3

  • 3.7.0: /usr/local/bin/python3

PEP 508 Information:

{'implementation_name': 'cpython',
 'implementation_version': '3.7.0',
 'os_name': 'posix',
 'platform_machine': 'x86_64',
 'platform_python_implementation': 'CPython',
 'platform_release': '17.7.0',
 'platform_system': 'Darwin',
 'platform_version': 'Darwin Kernel Version 17.7.0: Thu Jun 21 22:53:14 PDT '
                     '2018; root:xnu-4570.71.2~1/RELEASE_X86_64',
 'python_full_version': '3.7.0',
 'python_version': '3.7',
 'sys_platform': 'darwin'}

System environment variables:

  • PATH
  • TERM_PROGRAM
  • TERM
  • SHELL
  • PIP_PYTHON_PATH
  • OP_entry_name
  • TMPDIR
  • OL_client_secret
  • Apple_PubSub_Socket_Render
  • TERM_PROGRAM_VERSION
  • OP_SESSION
  • HOMEBREW_AUTO_UPDATE_SECS
  • TERM_SESSION_ID
  • LC_ALL
  • USER
  • ONFIDO_ROLE
  • SSH_AUTH_SOCK
  • __CF_USER_TEXT_ENCODING
  • nvm_prefix
  • VIRTUAL_ENV_DISABLE_PROMPT
  • VIRTUAL_ENV
  • PIPENV_ACTIVE
  • PWD
  • OL_client_id
  • EDITOR
  • LANG
  • ITERM_PROFILE
  • XPC_FLAGS
  • OL_region
  • PYTHONDONTWRITEBYTECODE
  • XPC_SERVICE_NAME
  • SHLVL
  • PYENV_SHELL
  • HOME
  • COLORFGBG
  • ITERM_SESSION_ID
  • LOGNAME
  • _OLD_VIRTUAL_PATH
  • LC_CTYPE
  • OL_username
  • __pipenv_fish_initial_pwd
  • COLORTERM

Pipenv–specific environment variables:

  • PIPENV_ACTIVE: 1

Debug–specific environment variables:

  • PATH: /usr/local/Cellar/pipenv/2018.7.1/libexec/tools:/Users/tom/.local/share/virtualenvs/base-proj-lBpX7WJ2/bin:/Users/tom/.pyenv/shims:/usr/local/Cellar/pipenv/2018.7.1/libexec/tools:/Users/tom/.pyenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Applications/Wireshark.app/Contents/MacOS
  • SHELL: /usr/local/bin/fish
  • EDITOR: nano
  • LANG: en_US.UTF-8
  • PWD: /Users/tom/projects/pipenv-test/base-proj
  • VIRTUAL_ENV: /Users/tom/.local/share/virtualenvs/base-proj-lBpX7WJ2

Contents of Pipfile ('/Users/tom/projects/pipenv-test/base-proj/Pipfile'):

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
tensorflow = "==1.8.0"
sub-package = {editable = true, path = "./../sub-package"}

[dev-packages]

[requires]
python_version = "3.6"

Contents of Pipfile.lock ('/Users/tom/projects/pipenv-test/base-proj/Pipfile.lock'):

{
    "_meta": {
        "hash": {
            "sha256": "d9be781a0c99deda926abe1f0ad149d718c738ffe906d002d6f79bf053edb66f"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.6"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "absl-py": {
            "hashes": [
                "sha256:e0eb8358b549552b1cc5972350bc3e41dd0a926c15b3ff95ce60f3c78c80824c"
            ],
            "version": "==0.2.2"
        },
        "astor": {
            "hashes": [
                "sha256:95c30d87a6c2cf89aa628b87398466840f0ad8652f88eb173125a6df8533fb8d",
                "sha256:fb503b9e2fdd05609fbf557b916b4a7824171203701660f0c55bbf5a7a68713e"
            ],
            "markers": "python_version != '3.0.*' and python_version != '3.3.*' and python_version != '3.2.*' and python_version != '3.1.*' and python_version >= '2.7'",
            "version": "==0.7.1"
        },
        "bleach": {
            "hashes": [
                "sha256:978e758599b54cd3caa2e160d74102879b230ea8dc93871d0783721eef58bc65",
                "sha256:e67f46adcec78dbc3c04462f3aba3213a673d5652eba2609ed1ef15492a44b8d"
            ],
            "version": "==1.5.0"
        },
        "gast": {
            "hashes": [
                "sha256:7068908321ecd2774f145193c4b34a11305bd104b4551b09273dfd1d6a374930"
            ],
            "version": "==0.2.0"
        },
        "grpcio": {
            "hashes": [
                "sha256:002f9170d8c0c10c33f643240c2332ce6eb8c8cc8c2b08d6a8f3172ef574751b",
                "sha256:0f80b28033105e99e08d84361b899c45bd6eb31d2765ff2ed7cb66b8b1d12820",
                "sha256:1012969abbec9a6c5d7b09ac829df296cb0a2ddebe70dd314abb881fa62cbcc9",
                "sha256:19af04506fec213de9a889343d4b090e9d0b675e1d9b8397ea6fc6521f939a48",
                "sha256:37cdffc26987ae2a077cc80fc0d87273e0e01ba15df40ec0a20d107e635700cf",
                "sha256:4e72b30a276e519d687dc53d86ecf9d65edf31dad473f3bbd041542bbf9df12f",
                "sha256:564499d84c2e90eb87819f7a299eaa2aee32db8208a8e8d00e8941a0c66413c0",
                "sha256:6324581e215157f0fbe335dff2e21a65b4406db98ac7cca05f1e23b4f510b426",
                "sha256:64758d2718f14792286b32d31560edb10c3726ce5d5875c3472c95908b658aeb",
                "sha256:67b36c6b0070ef858e5438e82d3a3fb19db33a174572019744d7b965c95fa9b0",
                "sha256:83766cdfc3492a693902eff193648b3cc9710e4a131815cd0cc60e30e9b7cf8f",
                "sha256:935a0b328b79e03a47d87960836513bab1150d0faab44aff7968f8623ed48d62",
                "sha256:982349cc24df7569ab955bafa3ba7575140db171c3bd757fa135d0c0c0d6990d",
                "sha256:9c79eaca4b0b8fb973c6e0c4c6cd4be44e76dfd09d56cfc7b2a959289fda6682",
                "sha256:9efcdfe1cc1670dde940f86e51fe080184f637106cf9b6d8dfc14cab9660d710",
                "sha256:a24a37e441c36d6605029cfb035806ef4f888a37d757e64fb0488d03c3fff806",
                "sha256:ab33b5965df89fd6e4ea7846cb9a28ece4e6d9ded23434d3321b992051a62de0",
                "sha256:ad6c12e9ab809fd4f8891a085a7655ca2690a5753bb6258d9d602084f610a223",
                "sha256:b1e4c83209bce5548029ed7df2af6a94415bb7dd37a2203183919d1d5a5249c9",
                "sha256:b87cdf8c4291875bda4b2a0f6747cab008fd9ea6c682a43d0869d308a16d0956",
                "sha256:b9e3793e0d1498e5c72993ba91f14e617e06e945d6562716bfbbbc6a9e7ab7de",
                "sha256:ba388412f64d6ac02098fcb77c409896297b058a8942d946bd1999699d35c123",
                "sha256:baaf1a0d5a5d9af67ec3ff0d9dfc1d642e7aba38e59ae60de1c6d1bd46406177",
                "sha256:be0d79c3253f7d23facc4dab96ada086e9b17048a36843041a5fac3bad9415e7",
                "sha256:ce3c23b1110238c1f440cdbceefd0c5fc7fcf3022c82c8a349514038aa69ac3d",
                "sha256:d9b9d309e7db3a988df0d12ba3c1ca4a7059c502c10ce34d4d65779bebbb6949",
                "sha256:ddd489b4730d7eccf9b836216d7137f85b3e68258a292a618a12e9ce5a7bcfb0",
                "sha256:dee025675506fc84f475b9fb0c8ce2cc9b663f9d7c7a22281ba878538be78fe8",
                "sha256:e6ac3198f4174c1b58e3a6b765d0b9cdcead231ba8bf4ddd30709320960b6e39",
                "sha256:e738782d0216087cb7ee9acc54305db9a30bf9a784bff7a407b748a91dd8c942",
                "sha256:f136b98861f27e2628f824c7c7e8d4bce47c9e18953fd00a0aca1d1c9cfd1b6c"
            ],
            "version": "==1.13.0"
        },
        "html5lib": {
            "hashes": [
                "sha256:2612a191a8d5842bfa057e41ba50bbb9dcb722419d2408c78cff4758d0754868"
            ],
            "version": "==0.9999999"
        },
        "markdown": {
            "hashes": [
                "sha256:9ba587db9daee7ec761cfc656272be6aabe2ed300fece21208e4aab2e457bc8f",
                "sha256:a856869c7ff079ad84a3e19cd87a64998350c2b94e9e08e44270faef33400f81"
            ],
            "version": "==2.6.11"
        },
        "numpy": {
            "hashes": [
                "sha256:07379fe0b450f6fd6e5934a9bc015025bb4ce1c8fbed3ca8bef29328b1bc9570",
                "sha256:085afac75bbc97a096744fcfc97a4b321c5a87220286811e85089ae04885acdd",
                "sha256:2d6481c6bdab1c75affc0fc71eb1bd4b3ecef620d06f2f60c3f00521d54be04f",
                "sha256:2df854df882d322d5c23087a4959e145b953dfff2abe1774fec4f639ac2f3160",
                "sha256:381ad13c30cd1d0b2f3da8a0c1a4aa697487e8bb0e9e0cbeb7439776bcb645f8",
                "sha256:385f1ce46e08676505b692bfde918c1e0b350963a15ef52d77691c2cf0f5dbf6",
                "sha256:4130e5ae16c656b7de654dc5e595cfeb85d3a4b0bb0734d19c0dce6dc7ee0e07",
                "sha256:4d278c2261be6423c5e63d8f0ceb1b0c6db3ff83f2906f4b860db6ae99ca1bb5",
                "sha256:51c5dcb51cf88b34b7d04c15f600b07c6ccbb73a089a38af2ab83c02862318da",
                "sha256:589336ba5199c8061239cf446ee2f2f1fcc0c68e8531ee1382b6fc0c66b2d388",
                "sha256:5ae3564cb630e155a650f4f9c054589848e97836bebae5637240a0d8099f817b",
                "sha256:5edf1acc827ed139086af95ce4449b7b664f57a8c29eb755411a634be280d9f2",
                "sha256:6b82b81c6b3b70ed40bc6d0b71222ebfcd6b6c04a6e7945a936e514b9113d5a3",
                "sha256:6c57f973218b776195d0356e556ec932698f3a563e2f640cfca7020086383f50",
                "sha256:758d1091a501fd2d75034e55e7e98bfd1370dc089160845c242db1c760d944d9",
                "sha256:8622db292b766719810e0cb0f62ef6141e15fe32b04e4eb2959888319e59336b",
                "sha256:8b8dcfcd630f1981f0f1e3846fae883376762a0c1b472baa35b145b911683b7b",
                "sha256:91fdd510743ae4df862dbd51a4354519dd9fb8941347526cd9c2194b792b3da9",
                "sha256:97fa8f1dceffab782069b291e38c4c2227f255cdac5f1e3346666931df87373e",
                "sha256:9b705f18b26fb551366ab6347ba9941b62272bf71c6bbcadcd8af94d10535241",
                "sha256:9d69967673ab7b028c2df09cae05ba56bf4e39e3cb04ebe452b6035c3b49848e",
                "sha256:9e1f53afae865cc32459ad211493cf9e2a3651a7295b7a38654ef3d123808996",
                "sha256:a4a433b3a264dbc9aa9c7c241e87c0358a503ea6394f8737df1683c7c9a102ac",
                "sha256:baadc5f770917ada556afb7651a68176559f4dca5f4b2d0947cd15b9fb84fb51",
                "sha256:c725d11990a9243e6ceffe0ab25a07c46c1cc2c5dc55e305717b5afe856c9608",
                "sha256:d696a8c87315a83983fc59dd27efe034292b9e8ad667aeae51a68b4be14690d9",
                "sha256:e1864a4e9f93ddb2dc6b62ccc2ec1f8250ff4ac0d3d7a15c8985dd4e1fbd6418",
                "sha256:e1d18421a7e2ad4a655b76e65d549d4159f8874c18a417464c1d439ee7ccc7cd"
            ],
            "markers": "python_version != '3.0.*' and python_version != '3.3.*' and python_version != '3.2.*' and python_version != '3.1.*' and python_version >= '2.7'",
            "version": "==1.14.5"
        },
        "protobuf": {
            "hashes": [
                "sha256:12985d9f40c104da2f44ec089449214876809b40fdc5d9e43b93b512b9e74056",
                "sha256:12c97fe27af12fc5d66b23f905ab09dd4fb0c68d5a74a419d914580e6d2e71e3",
                "sha256:327fb9d8a8247bc780b9ea7ed03c0643bc0d22c139b761c9ec1efc7cc3f0923e",
                "sha256:3895319db04c0b3baed74fb66be7ba9f4cd8e88a432b8e71032cdf08b2dfee23",
                "sha256:695072063e256d32335d48b9484451f7c7948edc3dbd419469d6a778602682fc",
                "sha256:7d786f3ef5b33a04e6538089674f244a3b0f588155016559d950989010af97d0",
                "sha256:8bf82bb7a466a54be7272dcb492f71d55a2453a58d862fb74c3f2083f2768543",
                "sha256:9bbc1ae1c33c1bd3a2fc05a3aec328544d2b039ff0ce6f000063628a32fad777",
                "sha256:9f1087abb67b34e55108bc610936b34363a7aac692023bcbb17e065c253a1f80",
                "sha256:9fefcb92a3784b446abf3641d9a14dad815bee88e0edd10b9a9e0e144d01a991",
                "sha256:a37836aa47d1b81c2db1a6b7a5e79926062b5d76bd962115a0e615551be2b48d",
                "sha256:cca22955443c55cf86f963a4ad7057bca95e4dcde84d6a493066d380cfab3bb0",
                "sha256:d7ac50bc06d31deb07ace6de85556c1d7330e5c0958f3b2af85037d6d1182abf",
                "sha256:dfe6899304b898538f4dc94fa0b281b56b70e40f58afa4c6f807805261cbe2e8"
            ],
            "version": "==3.6.0"
        },
        "six": {
            "hashes": [
                "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9",
                "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"
            ],
            "version": "==1.11.0"
        },
        "tensorboard": {
            "hashes": [
                "sha256:2651a4d9261a6593cb2c3514576e4bf25e273837c79e98f68a3cf51759f68725",
                "sha256:7776cc8bcfd0d07cd106e9e86c011ab8eca38c97b57f5433b9f0fd6bbf31a36e"
            ],
            "markers": "python_version != '3.0.*' and python_version != '3.3.*' and python_version != '3.2.*' and python_version != '3.1.*' and python_version >= '2.7'",
            "version": "==1.8.0"
        },
        "tensorflow": {
            "hashes": [
                "sha256:1fc4eb267bc973f2a8466778ad0c6f110f8356373e534c8463a7bb9b6d86e5f0",
                "sha256:24c3d3f87dc6108f4de3bbb7f647bcd6f303f874721b176185f260adea88fe40",
                "sha256:3087797a85610b756066df294f98e666e49f4fa60c6e1dbcf4b190b21397af71",
                "sha256:36a6671d39a3aec89cb4cce125e90305c3f8a69da16d2fb72eff40fe478e1de9",
                "sha256:373c637f9c4f06346b1b02e280b30517d262a1651b252ff889f7c22716ef4548",
                "sha256:397c0766e166fb768613b1498a2a6f67eeea077425d234c0138d55e85408473d",
                "sha256:68bda870c355aa64dc3dc377d5b9d13c829281467a7c3b95cb8529031d8f68b2",
                "sha256:899e53e01efcc8e906b3d1f53fe6a6264edf5dfc275b32cadbc6f4e33dca78f7",
                "sha256:92801b9aebcc195d3b5a492d1d46330c47c11c6f0c0f7ab6b605da489482c64e",
                "sha256:d345d296aeb05eeb50d9de43a1dcb66ceaba6a2bd603f58aeefaa07b2c1bfac1",
                "sha256:dccc205e84cd33a240a601046e88eacefe12d677a1bbdf17f0ebafd1a7c84c70",
                "sha256:de51f60021ea8160ea6d0340e827a26331cd549f6e7c470fba7ee83aeab4f818"
            ],
            "index": "pypi",
            "version": "==1.8.0"
        },
        "termcolor": {
            "hashes": [
                "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"
            ],
            "version": "==1.1.0"
        },
        "werkzeug": {
            "hashes": [
                "sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c",
                "sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b"
            ],
            "version": "==0.14.1"
        },
        "wheel": {
            "hashes": [
                "sha256:0a2e54558a0628f2145d2fc822137e322412115173e8a2ddbe1c9024338ae83c",
                "sha256:80044e51ec5bbf6c894ba0bc48d26a8c20a9ba629f4ca19ea26ecfcf87685f5f"
            ],
            "markers": "python_version >= '3'",
            "version": "==0.31.1"
        }
    },
    "develop": {}
}
@orf orf changed the title Pipenv fails to resolve dependencies of dependencies correctly Pipenv resolves tensorboard subdependency to unsolvable state Jul 17, 2018
@orf
Copy link
Author

orf commented Jul 17, 2018

I've been digging into this a bit. It appears that if you specify a top-level requirement like this then the pip resolver will resolve package dependencies correctly and combine the specifiers regardless of where the package comes from.

So in the case above we resolve two requirements: tensorflow==1.8.0 and tensorflow (1.9.0). In the case where I am not pinning tensorflow, I'd expect it to be resolved to the latest versions within the constraints I've specified, but it instead attempts to resolve the mutually incompatible subdependencies of each version, then fails.

This seems to be similar to #2583 - the underlying issue is that I (and I'm sure others) assume that a requirement like jinja2 would match any available version within some constraints, but it seems that the resolver instead sees this as jinja2==LATEST_RELEASE. Maybe at some point down the line the LATEST_RELEASE is filtered out for the release that matches the constraints given, but before then it seems to cause havoc in some situations.

@uranusjr
Copy link
Member

It is, indeed. The root issue is that Pipenv’s resolver (which is basically pip-tools) lacks a feature called backtracking. Think of it like save-load points in an RPG video game—you save before you make a decision, and then play on to see what happens. If you don’t like the outcome, load and do things differently, until you get what you want. If nothing you do is satisfying, load an earlier save and try again from there, and so on.

Backtracking is not a simple thing to implement. It is not difficult (basically an already-solved problem), but requires significant resources to implement, which the project lacks. Please do try to work on this issue if you’re interested, we will be very, very thankful for your effort.

@orf
Copy link
Author

orf commented Jul 17, 2018

Can you elaborate on how backtracking would solve this particular case? I'm very interested in helping if I can - perhaps it's the coffee (or lack thereof) but I cannot see how backtracking fits in specifically here. How would we know when to snapshot? Would this not cause a very exhaustive search which would slow down locking? Wouldn't the number of snapshots and backtracks grow exponentially?

Isn't the real problem here that the resolver cannot work out that >10,<10 is unsolvable and should be resolved as two separate, independent requirements that can be reduced later? Wouldn't a more graph-like structure of dependencies + constraints help here? As far as I can tell (and please correct me if I'm wrong!) the resolver is more of a flat, un-linked bag of individual dependencies?

@uranusjr
Copy link
Member

Consider this simple scenario. There are packages A, B, C, and D.

  • A depends on B and C.
  • B depends on C and D.

And you specify A in your Pipfile.

The resolver can be thought of working in rounds. For each round, we look inside each package to find their dependencies, add them into the list, and repeat, until we cannot find anymore.

R0: A.
R1: A depends on B and C. Now we have A, B, C.
R2: B depends on C and D; C does not depend on anything. Now A, B, C, D.
R3: D does not depend on anything. Still A, B, C, D. Resolution finished successfully.

Now let’s consider versions. Say A, B, and D each has one version (to keeps things simple), while C has two, C1 and C2.

  • A depends on B and C.
  • B depends on C and D, but requires C1 (i.e. specifies C<2 as a dependency).

R0: A.
R1: A wants on B and C. Which C should we choose? We don’t know.

What Pipenv current does is to always prefer the latest, so…

R1: A, B, C2.
R2: B wants C1 and D. Now we have a problem, we can’t install C1 and C2 at the same time. Resolution fails.

What backtracking allows, is to save before we made that decision in round 1.

R1: A, B, C… save here.
R1a: A, B, C2.
R2-1a: This does not work. Load.
R1b: A, B, C1.
R2-1b: A, B, C1, D. Success!

Now generalise this. Package X may require P<5 in v1, and P>5 in v2. We might choose v2 first, but if that prooves to be a problem later on (perhaps Y requires P<5 in all versions), we can backtrack and choose the v1 series of X instead. Those conflicting version requirements you see generally come from this kind of more complicated graphs, and backtracking is the solution to it (if there is a solution at all).

Backtracking resolution algorithm is largely a solved problem, and there are implementations in various languages. Python, however, is more lacking in this regard. Mixology, which is used by Poetry (another tool that also uses a lock file), and largely similar to Ruby’s Molinillo (used by Bundler and Cocoapods), is the only one I know in real-world production use. Zazo is another, but it is in an even earlier stage.

I hope the above clarifies things somewhat. This is not a simple topic to work on (though again, not difficult, because everything is already solved, you only need to implement it with a straight head), but would help Pipenv—and I’dsay, the whole Python comminuty—tremendously, if done correctly.

@oliland
Copy link

oliland commented Jul 17, 2018

Without reading into this too much, would something like https://labix.org/python-constraint help here?

@sdispater
Copy link

Mixology, which is used by Poetry (another tool that also uses a lock file), and largely similar to Ruby’s Molinillo

Just for information this is no longer the case since it was way too slow for Python packaging ecosystem. It works well if all the metadata is available via an API but not otherwise. So I implemented in Poetry another resolver which is lazy (it gets the information only when needed), has conflict resolution and a backtracking algorithm. This led to cutting down extreme cases which would take 30 minutes to less than a minute now. And most of the time it will resolve dependencies in less than 10 seconds.

@uranusjr
Copy link
Member

uranusjr commented Jul 17, 2018

@sdispater Thanks for the updated information! May I ask if the implementation currently in use in Poetry is still a variant of same backtracking resolver? I’ve been looking into Mixology (and Milinillo), and the problem to me is that the dependency information for each version is fetched too eagerly when populating a specification. I was under the impression that by implementing possibilities as a lazily-evaluated list would solve most of the problem. Is my impression correct, or would there be other bottlenecks that are impossible to get through? Also—do you plan to extract the new mixology implementation so it can be used in another project? It would greatly benefit not only Pipenv, but also the general Python ecosystem in general (e.g. it would solve a large portion of the long-standing pip problem).

@oliland Indeed! Constraint Satification is a generalisation of this particular topic. The library works in a lower level (more abstract, mathematical) than specialised dependency resolvers, but they are all solving the same problem in the end.

@orf
Copy link
Author

orf commented Jul 17, 2018

So I implemented in Poetry another resolver which is lazy (it gets the information only when needed), has conflict resolution and a backtracking algorithm.

Would you be willing to split this out into a separate package? I would love to help with that, if you're time constrained and agreeable, as it could help a lot of projects in the ecosystem. It seems somewhat silly that the large number of tools that are springing up around this area all have to implement their own version of this, with various deficiencies and trade offs.

@techalchemy
Copy link
Member

@sdispater if you have plans to isolate mixology I am very interested, I have some implementations that haven't made it into pipenv due to time constraints but that probably is a project where we can collaborate a bit. Is it a full sat solver? Haven't yet seen a good implementation in python

@sdispater
Copy link

@uranusjr The resolver has a backtracking algorithm but it's rarely used since the cases where a true conflict occurs are rare.

I’ve been looking into Mixology (and Milinillo), and the problem to me is that the dependency information for each version is fetched too eagerly when populating a specification.

I agree and that's why I rewrote the resolver completely since it was too slow sometimes to be usable.

I was under the impression that by implementing possibilities as a lazily-evaluated list would solve most of the problem.

I tried that but it didn't lead anywhere, at least with the previous algorithm. It would make this worse since you couldn't check that a package's dependency set had already been seen before and thus ditch the package if it had been, so you would inspect packages that did not warrant being checked, slowing down the process even more.

@uranusjr @orf @techalchemy I plan on extract it from Poetry at some point, yes. However, I don't have an ETA yet since right now it's tightly coupled with other parts of the codebase (like a version constraint module). So I have to abstract some of the concepts used internally to make it a trully independent library.

@techalchemy
Copy link
Member

@sdispater thanks for the clarity on that, appreciate the info! Definitely keep us posted, feel free to let us know if we can help out at all

@uranusjr
Copy link
Member

@sdispater Would you mind if I try to extract Mixology from Poetry into a standalone repository on my own? I’m trying to work on the resolver logic, and it would be great if I could have something to interface against. I will include appropriate attribution, of course.

@lukesmurray
Copy link

lukesmurray commented Jul 23, 2018

While this issue is being resolved is there a workaround for those of us who want to use pipenv for packages which resolve to unresolvable states? For example I have a pipfile which resolves jupyter to an unresolvable state (most likely because I am using python 2.7 which is stuck on ipython<6). I've specified ipython = "<6" in my pipfile but pipenv install still fails if I include jupyter or jupyterlab in the pipfile. I've resorted to using an extra script in my build process which runs pipenv install jupyter --skip-lock but I'd like to avoid that and somehow specify the --skip-lock in the pipfile. I understand this in some ways undermines the purpose of a pipfile but the alternative is to create a build process which calls a series of shell scripts or avoid using pipenv altogether. Another issue with my current set up is that it's not clear just from reading the pipfile that the program has a dependency on jupyter.

@thalesmello
Copy link

thalesmello commented Jul 23, 2018

@lukesmurray poetry is an alternative dependency version management tool that serves the same purpose of pipenv, but they claim to have a better dependency resolution algorithm than pipenv. In case you can't afford to way this bug to be fixed, you could use it.

Pipenv is already integrated in my deployment process, so I particularly rather wait for this to be fixed.

@uranusjr uranusjr changed the title Pipenv resolves tensorboard subdependency to unsolvable state Pipenv fails to resolve subdependency when viable solution exists Jul 24, 2018
@uranusjr uranusjr added help wanted Category: Dependency Resolution Issue relates to dependency resolution. labels Jul 24, 2018
@lukesmurray
Copy link

@uranusjr I would like to help out with this if at all possible. Would you want the dependency resolution to be built on top of the patched version of pip-tools?

@ltm
Copy link

ltm commented Jul 24, 2018

FWIW, this appears to be a recent regression and downgrading to pipenv==2018.5.18 is a workaround until this issue is fixed. I suspect it's related to the upgrade from pip 9 to pip 10 (i.e. #2255).

@techalchemy
Copy link
Member

hm interesting @ltm thanks for the tip. That gives us a good place to start looking

@uranusjr
Copy link
Member

@lukesmurray We are still trying to figure out the best approach. It would be worthwhile to take a look at pip-tools and see if it can be built upon, but we don’t necessarily need to build on it.

@stvnksslr
Copy link

Chiming in to say that @ltm solution of rolling back to 2018.5.18 worked for me as a work around 👍

@gzagatti
Copy link
Contributor

I can report that I am having a similar issue when trying to install pytest and pytest-cov, which is a plugin of pytest.

Since there are no restrictions on both of the items, there should be no conflicts between both since pytest-cov is developed to be used with pytest as a plugin. There should be a version of pytest (if not the latest) which works with pytest-cov.

A minimal Pipfile like the one below will fail complaining that it could not find a version that matches pluggy<0.7,>=0.5,>=0.7:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
pytest-cov = "*"
pytest = "*"

[requires]
python_version = "3.6"

@nickdani
Copy link

nor to add jinja2 = "==2.9.0" explicitly in you Pipfile not pipenv lock --clear helped...
How can I use pipenv together with airflow?

@gerardo
Copy link

gerardo commented Sep 3, 2018

Is this being worked on? I can't find a related PR for this.

@m-aciek
Copy link

m-aciek commented Sep 10, 2018

@gerardo I think it is being worked on in passa project.

@pranasziaukas
Copy link

It appears to be the same issue with the smart-open package

Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
Could not find a version that matches botocore<1.11.0,<1.13.0,<2.0.0,==1.10.84,>=1.10.65,>=1.12.0,>=1.3.0

And the graph

smart-open==1.6.0
  - boto [required: >=2.32, installed: 2.49.0]
  - boto3 [required: Any, installed: 1.9.0]
    - botocore [required: >=1.12.0,<1.13.0, installed: 1.12.0]
      - docutils [required: >=0.10, installed: 0.14]
      - jmespath [required: >=0.7.1,<1.0.0, installed: 0.9.3]
      - python-dateutil [required: >=2.1,<3.0.0, installed: 2.7.3]
        - six [required: >=1.5, installed: 1.11.0]
      - urllib3 [required: >=1.20,<1.24, installed: 1.23]
    - jmespath [required: >=0.7.1,<1.0.0, installed: 0.9.3]
    - s3transfer [required: >=0.1.10,<0.2.0, installed: 0.1.13]
      - botocore [required: >=1.3.0,<2.0.0, installed: 1.12.0]
        - docutils [required: >=0.10, installed: 0.14]
        - jmespath [required: >=0.7.1,<1.0.0, installed: 0.9.3]
        - python-dateutil [required: >=2.1,<3.0.0, installed: 2.7.3]
          - six [required: >=1.5, installed: 1.11.0]
        - urllib3 [required: >=1.20,<1.24, installed: 1.23]
  - bz2file [required: Any, installed: 0.98]
  - requests [required: Any, installed: 2.19.1]
    - certifi [required: >=2017.4.17, installed: 2018.8.24]
    - chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
    - idna [required: >=2.5,<2.8, installed: 2.7]
    - urllib3 [required: >=1.21.1,<1.24, installed: 1.23]

@devxpy
Copy link
Contributor

devxpy commented Sep 19, 2018

Encountered another such situation:

It's not hindering my ability to use the packages, but there is a warning.

Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
Could not find a version that matches django<2.1.0,==2.1.1,>=1.5 (from -r /tmp/pipenv-jb_c05f6-requirements/pipenv-wlikcsrz-constraints.txt (line 8))
Tried: 1.1.3, 1.1.4, 1.2, 1.2.1, 1.2.2, 1.2.3, 1.2.4, 1.2.5, 1.2.6, 1.2.7, 1.3, 1.3.1, 1.3.2, 1.3.3, 1.3.4, 1.3.5, 1.3.6, 1.3.7, 1.4, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.4.5, 1.4.6, 1.4.7, 1.4.8, 1.4.9, 1.4.10, 1.4.11, 1.4.12, 1.4.13, 1.4.14, 1.4.15, 1.4.16, 1.4.17, 1.4.18, 1.4.19, 1.4.20, 1.4.21, 1.4.22, 1.5, 1.5.1, 1.5.2, 1.5.2, 1.5.3, 1.5.4, 1.5.5, 1.5.6, 1.5.7, 1.5.8, 1.5.8, 1.5.9, 1.5.10, 1.5.11, 1.5.12, 1.5.12, 1.6, 1.6, 1.6.1, 1.6.1, 1.6.2, 1.6.2, 1.6.3, 1.6.3, 1.6.4, 1.6.4, 1.6.5, 1.6.5, 1.6.6, 1.6.6, 1.6.7, 1.6.7, 1.6.8, 1.6.8, 1.6.9, 1.6.9, 1.6.10, 1.6.10, 1.6.11, 1.6.11, 1.7, 1.7, 1.7.1, 1.7.1, 1.7.2, 1.7.2, 1.7.3, 1.7.3, 1.7.4, 1.7.4, 1.7.5, 1.7.5, 1.7.6, 1.7.6, 1.7.7, 1.7.7, 1.7.8, 1.7.8, 1.7.9, 1.7.9, 1.7.10, 1.7.10, 1.7.11, 1.7.11, 1.8, 1.8, 1.8.1, 1.8.1, 1.8.2, 1.8.2, 1.8.3, 1.8.3, 1.8.4, 1.8.4, 1.8.5, 1.8.5, 1.8.6, 1.8.6, 1.8.7, 1.8.7, 1.8.8, 1.8.8, 1.8.9, 1.8.9, 1.8.10, 1.8.10, 1.8.11, 1.8.11, 1.8.12, 1.8.12, 1.8.13, 1.8.13, 1.8.14, 1.8.14, 1.8.15, 1.8.15, 1.8.16, 1.8.16, 1.8.17, 1.8.17, 1.8.18, 1.8.18, 1.8.19, 1.8.19, 1.9, 1.9, 1.9.1, 1.9.1, 1.9.2, 1.9.2, 1.9.3, 1.9.3, 1.9.4, 1.9.4, 1.9.5, 1.9.5, 1.9.6, 1.9.6, 1.9.7, 1.9.7, 1.9.8, 1.9.8, 1.9.9, 1.9.9, 1.9.10, 1.9.10, 1.9.11, 1.9.11, 1.9.12, 1.9.12, 1.9.13, 1.9.13, 1.10, 1.10, 1.10.1, 1.10.1, 1.10.2, 1.10.2, 1.10.3, 1.10.3, 1.10.4, 1.10.4, 1.10.5, 1.10.5, 1.10.6, 1.10.6, 1.10.7, 1.10.7, 1.10.8, 1.10.8, 1.11, 1.11, 1.11.1, 1.11.1, 1.11.2, 1.11.2, 1.11.3, 1.11.3, 1.11.4, 1.11.4, 1.11.5, 1.11.5, 1.11.6, 1.11.6, 1.11.7, 1.11.7, 1.11.8, 1.11.8, 1.11.9, 1.11.9, 1.11.10, 1.11.10, 1.11.11, 1.11.11, 1.11.12, 1.11.12, 1.11.13, 1.11.13, 1.11.14, 1.11.14, 1.11.15, 1.11.15, 2.0, 2.0, 2.0.1, 2.0.1, 2.0.2, 2.0.2, 2.0.3, 2.0.3, 2.0.4, 2.0.4, 2.0.5, 2.0.5, 2.0.6, 2.0.6, 2.0.7, 2.0.7, 2.0.8, 2.0.8, 2.1, 2.1, 2.1.1, 2.1.1
Skipped pre-versions: 1.8a1, 1.8b1, 1.8b2, 1.8rc1, 1.9a1, 1.9b1, 1.9rc1, 1.9rc2, 1.10a1, 1.10a1, 1.10b1, 1.10b1, 1.10rc1, 1.10rc1, 1.11a1, 1.11b1, 1.11rc1, 1.11rc1, 2.0a1, 2.0b1, 2.0rc1, 2.1a1, 2.1b1, 2.1rc1
There are incompatible versions in the resolved dependencies.
$ pipenv graph

Adafruit-ADS1x15==1.0.2
  - Adafruit-GPIO [required: >=0.6.5, installed: 1.0.3]
    - adafruit-pureio [required: Any, installed: 0.2.3]
    - spidev [required: Any, installed: 3.2]
crayons==0.1.2
  - colorama [required: Any, installed: 0.3.9]
django-click==2.1.0
  - click [required: >5.0, installed: 6.7]
  - six [required: >=1.9.0, installed: 1.11.0]
django-hamlpy==1.1.1
  - django [required: Any, installed: 2.0.8]
    - pytz [required: Any, installed: 2018.5]
  - enum34 [required: Any, installed: 1.1.6]
  - future [required: Any, installed: 0.16.0]
  - regex [required: Any, installed: 2018.8.29]
  - six [required: Any, installed: 1.11.0]
enaml==0.10.2
  - atom [required: >=0.4.1, installed: 0.4.1]
    - future [required: Any, installed: 0.16.0]
    - setuptools [required: Any, installed: 40.0.0]
  - future [required: Any, installed: 0.16.0]
  - kiwisolver [required: >=1.0.0, installed: 1.0.1]
    - setuptools [required: Any, installed: 40.0.0]
  - ply [required: >=3.4, installed: 3.11]
  - qtpy [required: >=1.3, installed: 1.5.0]
  - setuptools [required: Any, installed: 40.0.0]
furl==1.2.1
  - orderedmultidict [required: >=1.0, installed: 1.0]
    - six [required: >=1.8.0, installed: 1.11.0]
  - six [required: >=1.8.0, installed: 1.11.0]
google-api-python-client==1.7.4
  - google-auth [required: >=1.4.1, installed: 1.5.1]
    - cachetools [required: >=2.0.0, installed: 2.1.0]
    - pyasn1-modules [required: >=0.2.1, installed: 0.2.2]
      - pyasn1 [required: >=0.4.1,<0.5.0, installed: 0.4.4]
    - rsa [required: >=3.1.4, installed: 3.4.2]
      - pyasn1 [required: >=0.1.3, installed: 0.4.4]
    - six [required: >=1.9.0, installed: 1.11.0]
  - google-auth-httplib2 [required: >=0.0.3, installed: 0.0.3]
    - google-auth [required: Any, installed: 1.5.1]
      - cachetools [required: >=2.0.0, installed: 2.1.0]
      - pyasn1-modules [required: >=0.2.1, installed: 0.2.2]
        - pyasn1 [required: >=0.4.1,<0.5.0, installed: 0.4.4]
      - rsa [required: >=3.1.4, installed: 3.4.2]
        - pyasn1 [required: >=0.1.3, installed: 0.4.4]
      - six [required: >=1.9.0, installed: 1.11.0]
    - httplib2 [required: >=0.9.1, installed: 0.11.3]
  - httplib2 [required: >=0.9.2,<1dev, installed: 0.11.3]
  - six [required: >=1.6.1,<2dev, installed: 1.11.0]
  - uritemplate [required: >=3.0.0,<4dev, installed: 3.0.0]
gunicorn==19.9.0
ipython==6.5.0
  - backcall [required: Any, installed: 0.1.0]
  - decorator [required: Any, installed: 4.3.0]
  - jedi [required: >=0.10, installed: 0.12.1]
    - parso [required: >=0.3.0, installed: 0.3.1]
  - pexpect [required: Any, installed: 4.6.0]
    - ptyprocess [required: >=0.5, installed: 0.6.0]
  - pickleshare [required: Any, installed: 0.7.4]
  - prompt-toolkit [required: >=1.0.15,<2.0.0, installed: 1.0.15]
    - six [required: >=1.9.0, installed: 1.11.0]
    - wcwidth [required: Any, installed: 0.1.7]
  - pygments [required: Any, installed: 2.2.0]
  - setuptools [required: >=18.5, installed: 40.0.0]
  - simplegeneric [required: >0.8, installed: 0.8.1]
  - traitlets [required: >=4.2, installed: 4.3.2]
    - decorator [required: Any, installed: 4.3.0]
    - ipython-genutils [required: Any, installed: 0.2.0]
    - six [required: Any, installed: 1.11.0]
isodate==0.6.0
  - six [required: Any, installed: 1.11.0]
numpy==1.15.1
oauth2client==4.1.3
  - httplib2 [required: >=0.9.1, installed: 0.11.3]
  - pyasn1 [required: >=0.1.7, installed: 0.4.4]
  - pyasn1-modules [required: >=0.0.5, installed: 0.2.2]
    - pyasn1 [required: >=0.4.1,<0.5.0, installed: 0.4.4]
  - rsa [required: >=3.1.4, installed: 3.4.2]
    - pyasn1 [required: >=0.1.3, installed: 0.4.4]
  - six [required: >=1.6.1, installed: 1.11.0]
parse==1.8.4
PyQt5==5.11.2
  - PyQt5-sip [required: >=4.19.11,<4.20, installed: 4.19.12]
python-decouple==3.1
python-mpv==0.3.9
RPi.GPIO==0.6.3
spotipy==2.4.4
  - requests [required: >=1.0, installed: 2.19.1]
    - certifi [required: >=2017.4.17, installed: 2018.8.24]
    - chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
    - idna [required: >=2.5,<2.8, installed: 2.7]
    - urllib3 [required: >=1.21.1,<1.24, installed: 1.23]
stream-django==1.4.0
  - django [required: >=1.5,<2.1.0, installed: 2.0.8]
    - pytz [required: Any, installed: 2018.5]
  - pytz [required: Any, installed: 2018.5]
  - stream-python [required: >=2.8.1, installed: 2.11.0]
    - pycryptodomex [required: ==3.4.7, installed: 3.4.7]
    - pyjwt [required: >=1.3.0,<1.7.0, installed: 1.6.4]
    - requests [required: >=2.3.0,<3, installed: 2.19.1]
      - certifi [required: >=2017.4.17, installed: 2018.8.24]
      - chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
      - idna [required: >=2.5,<2.8, installed: 2.7]
      - urllib3 [required: >=1.21.1,<1.24, installed: 1.23]
    - six [required: >=1.8.0, installed: 1.11.0]
youtube-dl==2018.9.8
zproc==0.9.2
  - psutil [required: Any, installed: 5.4.7]
  - pyzmq [required: Any, installed: 17.1.2]
  - tblib [required: Any, installed: 1.3.2]

Pipfile

[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages]
crayons = "*"
numpy = "*"
requests = "*"
spotipy = "*"
isodate = "*"
google-api-python-client = "*"
django = "*"
youtube-dl = "*"
click = "*"
"oauth2client" = "*"
"rpi.gpio" = "*"
"adafruit-ads1x15" = "*"
python-decouple = "*"
django-click = "*"
parse = "*"
furl = "*"
django-hamlpy = "*"
python-mpv = "*"
zproc = {editable = true, ref = "next", git = "https://github.com/pycampers/zproc.git"}
gunicorn = "*"
stream-django = "*"

[dev-packages]
enaml = "*"
"pyqt5" = "*"
ipython = "*"

[requires]
python_version = "3.6"

Pipfile.lock

{
    "_meta": {
        "hash": {
            "sha256": "d9fbd586f9779af10ebd259a329d91a5cd28eb33b26c052e8ca3cafcf52a0bd5"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.6"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.python.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "adafruit-ads1x15": {
            "hashes": [
                "sha256:058021475c51d8fad6ce8417d69ca5aea71dec9d9e5292e6b83b6cc8b338dcd3",
                "sha256:2076c114e3ca938ef5de13c608f2b28c517ca3d53407432fd470118556ab3feb"
            ],
            "index": "pypi",
            "version": "==1.0.2"
        },
        "adafruit-gpio": {
            "hashes": [
                "sha256:d6465b92c866c51ca8f3bc1e8f2ec36f5ccdb46d0fd54101c1109756d4a2dcd0"
            ],
            "version": "==1.0.3"
        },
        "adafruit-pureio": {
            "hashes": [
                "sha256:e65cd929f1d8e109513ed1e457c2742bf4f15349c1a9b7f5b1e04191624d7488"
            ],
            "version": "==0.2.3"
        },
        "cachetools": {
            "hashes": [
                "sha256:90f1d559512fc073483fe573ef5ceb39bf6ad3d39edc98dc55178a2b2b176fa3",
                "sha256:d1c398969c478d336f767ba02040fa22617333293fb0b8968e79b16028dfee35"
            ],
            "version": "==2.1.0"
        },
        "certifi": {
            "hashes": [
                "sha256:376690d6f16d32f9d1fe8932551d80b23e9d393a8578c5633a2ed39a64861638",
                "sha256:456048c7e371c089d0a77a5212fb37a2c2dce1e24146e3b7e0261736aaeaa22a"
            ],
            "version": "==2018.8.24"
        },
        "chardet": {
            "hashes": [
                "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
                "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
            ],
            "version": "==3.0.4"
        },
        "click": {
            "hashes": [
                "sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d",
                "sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b"
            ],
            "index": "pypi",
            "version": "==6.7"
        },
        "colorama": {
            "hashes": [
                "sha256:463f8483208e921368c9f306094eb6f725c6ca42b0f97e313cb5d5512459feda",
                "sha256:48eb22f4f8461b1df5734a074b57042430fb06e1d61bd1e11b078c0fe6d7a1f1"
            ],
            "version": "==0.3.9"
        },
        "crayons": {
            "hashes": [
                "sha256:5e17691605e564d63482067eb6327d01a584bbaf870beffd4456a3391bd8809d",
                "sha256:6f51241d0c4faec1c04c1c0ac6a68f1d66a4655476ce1570b3f37e5166a599cc"
            ],
            "index": "pypi",
            "version": "==0.1.2"
        },
        "django": {
            "hashes": [
                "sha256:04f2e423f2e60943c02bd2959174b844f7d1bcd19eabb7f8e4282999958021fd",
                "sha256:e1cc1cd6b658aa4e052f5f2b148bfda08091d7c3558529708342e37e4e33f72c"
            ],
            "index": "pypi",
            "version": "==2.1.1"
        },
        "django-click": {
            "hashes": [
                "sha256:1803979cbe328333ec935c8ddfbf03da40f94f3361585cf4142ac7c4da2d5fde",
                "sha256:d46cc7abcd5d7e612dcd75ba56bf57ee404d62de7d09c7c3397fa1f475c9c753"
            ],
            "index": "pypi",
            "version": "==2.1.0"
        },
        "django-hamlpy": {
            "hashes": [
                "sha256:90c4db413b9ab71b0a06daeb01181e935e06d053cfbe91fcf2c2ca7d5df6aaa2",
                "sha256:ac899cfc0595b228b4fa71d0d6bb9c02697d8ef68488e15e6798333f4e5a3abd"
            ],
            "index": "pypi",
            "version": "==1.1.1"
        },
        "enum34": {
            "hashes": [
                "sha256:2d81cbbe0e73112bdfe6ef8576f2238f2ba27dd0d55752a776c41d38b7da2850",
                "sha256:644837f692e5f550741432dd3f223bbb9852018674981b1664e5dc339387588a",
                "sha256:6bd0f6ad48ec2aa117d3d141940d484deccda84d4fcd884f5c3d93c23ecd8c79",
                "sha256:8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1"
            ],
            "version": "==1.1.6"
        },
        "furl": {
            "hashes": [
                "sha256:17654103b8d0cbe42798592db099c728165ac12057d49fe2e69de967d87bf29b"
            ],
            "index": "pypi",
            "version": "==1.2.1"
        },
        "future": {
            "hashes": [
                "sha256:e39ced1ab767b5936646cedba8bcce582398233d6a627067d4c6a454c90cfedb"
            ],
            "version": "==0.16.0"
        },
        "google-api-python-client": {
            "hashes": [
                "sha256:5d5cb02c6f3112c68eed51b74891a49c0e35263380672d662f8bfe85b8114d7c",
                "sha256:7cc47cf80b25ecd7f3d917ea247bb6c62587514e40604ae29c47c0e4ebd1174b"
            ],
            "index": "pypi",
            "version": "==1.7.4"
        },
        "google-auth": {
            "hashes": [
                "sha256:9ca363facbf2622d9ba828017536ccca2e0f58bd15e659b52f312172f8815530",
                "sha256:a4cf9e803f2176b5de442763bd339b313d3f1ed3002e3e1eb6eec1d7c9bbc9b4"
            ],
            "version": "==1.5.1"
        },
        "google-auth-httplib2": {
            "hashes": [
                "sha256:098fade613c25b4527b2c08fa42d11f3c2037dda8995d86de0745228e965d445",
                "sha256:f1c437842155680cf9918df9bc51c1182fda41feef88c34004bd1978c8157e08"
            ],
            "version": "==0.0.3"
        },
        "gunicorn": {
            "hashes": [
                "sha256:aa8e0b40b4157b36a5df5e599f45c9c76d6af43845ba3b3b0efe2c70473c2471",
                "sha256:fa2662097c66f920f53f70621c6c58ca4a3c4d3434205e608e121b5b3b71f4f3"
            ],
            "index": "pypi",
            "version": "==19.9.0"
        },
        "httplib2": {
            "hashes": [
                "sha256:e71daed9a0e6373642db61166fa70beecc9bf04383477f84671348c02a04cbdf"
            ],
            "version": "==0.11.3"
        },
        "idna": {
            "hashes": [
                "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e",
                "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16"
            ],
            "version": "==2.7"
        },
        "isodate": {
            "hashes": [
                "sha256:2e364a3d5759479cdb2d37cce6b9376ea504db2ff90252a2e5b7cc89cc9ff2d8",
                "sha256:aa4d33c06640f5352aca96e4b81afd8ab3b47337cc12089822d6f322ac772c81"
            ],
            "index": "pypi",
            "version": "==0.6.0"
        },
        "numpy": {
            "hashes": [
                "sha256:1c362ad12dd09a43b348bb28dd2295dd9cdf77f41f0f45965e04ba97f525b864",
                "sha256:2156a06bd407918df4ac0122df6497a9c137432118f585e5b17d543e593d1587",
                "sha256:24e4149c38489b51fc774b1e1faa9103e82f73344d7a00ba66f6845ab4769f3f",
                "sha256:340ec1697d9bb3a9c464028af7a54245298502e91178bddb4c37626d36e197b7",
                "sha256:35db8d419345caa4eeaa65cd63f34a15208acd87530a30f0bc25fc84f55c8c80",
                "sha256:361370e9b7f5e44c41eee29f2bb5cb3b755abb4b038bce6d6cbe08db7ff9cb74",
                "sha256:36e8dcd1813ca92ce7e4299120cee6c03adad33d89b54862c1b1a100443ac399",
                "sha256:378378973546ecc1dfaf9e24c160d683dd04df871ecd2dcc86ce658ca20f92c0",
                "sha256:419e6faee16097124ee627ed31572c7e80a1070efa25260b78097cca240e219a",
                "sha256:4287104c24e6a09b9b418761a1e7b1bbde65105f110690ca46a23600a3c606b8",
                "sha256:549f3e9778b148a47f4fb4682955ed88057eb627c9fe5467f33507c536deda9d",
                "sha256:5e359e9c531075220785603e5966eef20ccae9b3b6b8a06fdfb66c084361ce92",
                "sha256:5ee7f3dbbdba0da75dec7e94bd7a2b10fe57a83e1b38e678200a6ad8e7b14fdc",
                "sha256:62d55e96ec7b117d3d5e618c15efcf769e70a6effaee5842857b64fb4883887a",
                "sha256:719b6789acb2bc86ea9b33a701d7c43dc2fc56d95107fd3c5b0a8230164d4dfb",
                "sha256:7a70f2b60d48828cba94a54a8776b61a9c2657a803d47f5785f8062e3a9c7c55",
                "sha256:7b9e37f194f8bcdca8e9e6af92e2cbad79e360542effc2dd6b98d63955d8d8a3",
                "sha256:83b8fc18261b70f45bece2d392537c93dc81eb6c539a16c9ac994c47fc79f09a",
                "sha256:9473ad28375710ab18378e72b59422399b27e957e9339c413bf00793b4b12df0",
                "sha256:95b085b253080e5d09f7826f5e27dce067bae813a132023a77b739614a29de6e",
                "sha256:98b86c62c08c2e5dc98a9c856d4a95329d11b1c6058cb9b5191d5ea6891acd09",
                "sha256:a3bd01d6d3ed3d7c06d7f9979ba5d68281f15383fafd53b81aa44b9191047cf8",
                "sha256:c81a6afc1d2531a9ada50b58f8c36197f8418ef3d0611d4c1d7af93fdcda764f",
                "sha256:ce75ed495a746e3e78cfa22a77096b3bff2eda995616cb7a542047f233091268",
                "sha256:dae8618c0bcbfcf6cf91350f8abcdd84158323711566a8c5892b5c7f832af76f",
                "sha256:df0b02c6705c5d1c25cc35c7b5d6b6f9b3b30833f9d178843397ae55ecc2eebb",
                "sha256:e3660744cda0d94b90141cdd0db9308b958a372cfeee8d7188fdf5ad9108ea82",
                "sha256:f2362d0ca3e16c37782c1054d7972b8ad2729169567e3f0f4e5dd3cdf85f188e"
            ],
            "index": "pypi",
            "version": "==1.15.1"
        },
        "oauth2client": {
            "hashes": [
                "sha256:b8a81cc5d60e2d364f0b1b98f958dbd472887acaf1a5b05e21c28c31a2d6d3ac",
                "sha256:d486741e451287f69568a4d26d70d9acd73a2bbfa275746c535b4209891cccc6"
            ],
            "index": "pypi",
            "version": "==4.1.3"
        },
        "orderedmultidict": {
            "hashes": [
                "sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b",
                "sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5"
            ],
            "version": "==1.0"
        },
        "parse": {
            "hashes": [
                "sha256:c3cdf6206f22aeebfa00e5b954fcfea13d1b2dc271c75806b6025b94fb490939"
            ],
            "index": "pypi",
            "version": "==1.8.4"
        },
        "psutil": {
            "hashes": [
                "sha256:0d8da7333549a998556c18eb2af3ce902c28d66ceb947505c008f91e9f988abd",
                "sha256:1914bacbd2fc2af8f795daa44b9d2e0649a147460cfd21b1a70a124472f66d40",
                "sha256:215d61a901e67b1a35e14c6aedef317f7fa7e6075a20c150fd11bd2c906d2c83",
                "sha256:51057c03aea251ad6667c2bba259bc7ed3210222d3a74152c84e3ab06e1da0ba",
                "sha256:5b6322b167a5ba0c5463b4d30dfd379cd4ce245a1162ebf8fc7ab5c5ffae4f3b",
                "sha256:a890c3e490493f21da2817ffc92822693bc0d6bcac9999caa04ffce8dd4e7132",
                "sha256:b34611280a2d0697f1c499e15e936d88109170194b390599c98bab8072a71f05",
                "sha256:cea2557ee6a9faa2c100947637ded68414e12b851633c4ce26e0311b2a2ed539",
                "sha256:d081707ef0081920533db30200a2d30d5c0ea9cf6afa7cf8881ae4516cc69c48"
            ],
            "markers": "python_version >= '2.6' and python_version != '3.0.*' and python_version != '3.2.*' and python_version != '3.1.*' and python_version != '3.3.*'",
            "version": "==5.4.7"
        },
        "pyasn1": {
            "hashes": [
                "sha256:b9d3abc5031e61927c82d4d96c1cec1e55676c1a991623cfed28faea73cdd7ca",
                "sha256:f58f2a3d12fd754aa123e9fa74fb7345333000a035f3921dbdaa08597aa53137"
            ],
            "version": "==0.4.4"
        },
        "pyasn1-modules": {
            "hashes": [
                "sha256:a0cf3e1842e7c60fde97cb22d275eb6f9524f5c5250489e292529de841417547",
                "sha256:a38a8811ea784c0136abfdba73963876328f66172db21a05a82f9515909bfb4e"
            ],
            "version": "==0.2.2"
        },
        "python-decouple": {
            "hashes": [
                "sha256:1317df14b43efee4337a4aa02914bf004f010cd56d6c4bd894e6474ec8c4fe2d"
            ],
            "index": "pypi",
            "version": "==3.1"
        },
        "python-mpv": {
            "hashes": [
                "sha256:13dbbbcbd996afda37163cae6d4cbad0ef510188e467b16bc50aadc2a2cbdd52"
            ],
            "index": "pypi",
            "version": "==0.3.9"
        },
        "pytz": {
            "hashes": [
                "sha256:a061aa0a9e06881eb8b3b2b43f05b9439d6583c206d0a6c340ff72a7b6669053",
                "sha256:ffb9ef1de172603304d9d2819af6f5ece76f2e85ec10692a524dd876e72bf277"
            ],
            "version": "==2018.5"
        },
        "pyzmq": {
            "hashes": [
                "sha256:25a0715c8f69cf72f67cfe5a68a3f3ed391c67c063d2257bec0fe7fc2c7f08f8",
                "sha256:2bab63759632c6b9e0d5bf19cc63c3b01df267d660e0abcf230cf0afaa966349",
                "sha256:30ab49d99b24bf0908ebe1cdfa421720bfab6f93174e4883075b7ff38cc555ba",
                "sha256:32c7ca9fc547a91e3c26fc6080b6982e46e79819e706eb414dd78f635a65d946",
                "sha256:41219ae72b3cc86d97557fe5b1ef5d1adc1057292ec597b50050874a970a39cf",
                "sha256:4b8c48a9a13cea8f1f16622f9bd46127108af14cd26150461e3eab71e0de3e46",
                "sha256:55724997b4a929c0d01b43c95051318e26ddbae23565018e138ae2dc60187e59",
                "sha256:65f0a4afae59d4fc0aad54a917ab599162613a761b760ba167d66cc646ac3786",
                "sha256:6f88591a8b246f5c285ee6ce5c1bf4f6bd8464b7f090b1333a446b6240a68d40",
                "sha256:75022a4c60dcd8765bb9ca32f6de75a0ec83b0d96e0309dc479f4c7b21f26cb7",
                "sha256:76ea493bfab18dcb090d825f3662b5612e2def73dffc196d51a5194b0294a81d",
                "sha256:7b60c045b80709e4e3c085bab9b691e71761b44c2b42dbb047b8b498e7bc16b3",
                "sha256:8e6af2f736734aef8ed6f278f9f552ec7f37b1a6b98e59b887484a840757f67d",
                "sha256:9ac2298e486524331e26390eac14e4627effd3f8e001d4266ed9d8f1d2d31cce",
                "sha256:9ba650f493a9bc1f24feca1d90fce0e5dd41088a252ac9840131dfbdbf3815ca",
                "sha256:a02a4a385e394e46012dc83d2e8fd6523f039bb52997c1c34a2e0dd49ed839c1",
                "sha256:a3ceee84114d9f5711fa0f4db9c652af0e4636c89eabc9b7f03a3882569dd1ed",
                "sha256:a72b82ac1910f2cf61a49139f4974f994984475f771b0faa730839607eeedddf",
                "sha256:ab136ac51027e7c484c53138a0fab4a8a51e80d05162eb7b1585583bcfdbad27",
                "sha256:c095b224300bcac61e6c445e27f9046981b1ac20d891b2f1714da89d34c637c8",
                "sha256:c5cc52d16c06dc2521340d69adda78a8e1031705924e103c0eb8fc8af861d810",
                "sha256:d612e9833a89e8177f8c1dc68d7b4ff98d3186cd331acd616b01bbdab67d3a7b",
                "sha256:e828376a23c66c6fe90dcea24b4b72cd774f555a6ee94081670872918df87a19",
                "sha256:e9767c7ab2eb552796440168d5c6e23a99ecaade08dda16266d43ad461730192",
                "sha256:ebf8b800d42d217e4710d1582b0c8bff20cdcb4faad7c7213e52644034300924"
            ],
            "markers": "python_version != '3.0*' and python_version != '3.1*' and python_version != '3.2*' and python_version >= '2.7'",
            "version": "==17.1.2"
        },
        "regex": {
            "hashes": [
                "sha256:22d7ef8c2df344328a8a3c61edade2ee714e5de9360911d22a9213931c769faa",
                "sha256:3a699780c6b712c67dc23207b129ccc6a7e1270233f7aadead3ea3f83c893702",
                "sha256:42f460d349baebd5faec02a0c920988fb0300b24baf898d9c139886565b66b6c",
                "sha256:43bf3d79940cbdf19adda838d8b26b28b47bec793cda46590b5b25703742f440",
                "sha256:47d6c7f0588ef33464e00023067c4e7cce68e0d6a686a73c7ee15abfdad503d4",
                "sha256:5b879f59f25ed9b91bc8693a9a994014b431f224f492519ad0255ce6b54b83e5",
                "sha256:8ba0093c412900f636b0f826c597a0c3ea0e395344bc99894ddefe88b76c9c7e",
                "sha256:a4789254a1a0bd7a637036cce0b7ed72d8cc864e93f2e9cfd10ac00ae27bb7b0",
                "sha256:b73cea07117dca888b0c3671770b501bef19aac9c45c8ffdb5bea2cca2377b0a",
                "sha256:d3eb59fa3e5b5438438ec97acd9dc86f077428e020b015b43987e35bea68ef4c",
                "sha256:d51d232b4e2f106deaf286001f563947fee255bc5bd209a696f027e15cf0a1e7",
                "sha256:d59b03131a8e35061b47a8f186324a95eaf30d5f6ee9cc0637e7b87d29c7c9b5",
                "sha256:dd705df1b47470388fc4630e4df3cbbe7677e2ab80092a1c660cae630a307b2d",
                "sha256:e87fffa437a4b00afb17af785da9b01618425d6cd984c677639deb937037d8f2",
                "sha256:ed40e0474ab5ab228a8d133759d451b31d3ccdebaff698646e54aff82c3de4f8"
            ],
            "version": "==2018.8.29"
        },
        "requests": {
            "hashes": [
                "sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1",
                "sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a"
            ],
            "index": "pypi",
            "version": "==2.19.1"
        },
        "rpi.gpio": {
            "hashes": [
                "sha256:a5fc0eb5e401963b6c0a03650da6b42c4005f02d962b81241d96c98d0a578516"
            ],
            "index": "pypi",
            "version": "==0.6.3"
        },
        "rsa": {
            "hashes": [
                "sha256:25df4e10c263fb88b5ace923dd84bf9aa7f5019687b5e55382ffcdb8bede9db5",
                "sha256:43f682fea81c452c98d09fc316aae12de6d30c4b5c84226642cf8f8fd1c93abd"
            ],
            "version": "==3.4.2"
        },
        "six": {
            "hashes": [
                "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9",
                "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"
            ],
            "version": "==1.11.0"
        },
        "spidev": {
            "hashes": [
                "sha256:09d2b5122f0dd79910713a11f9a0020f71537224bf829916def4fffc0ea59456"
            ],
            "version": "==3.2"
        },
        "spotipy": {
            "hashes": [
                "sha256:4b05da481b5c5dd4d1da8c0f0d13ca805dde037db648d12be866244b19501ed1"
            ],
            "index": "pypi",
            "version": "==2.4.4"
        },
        "tblib": {
            "hashes": [
                "sha256:436e4200e63d92316551179dc540906652878df4ff39b43db30fcf6400444fe7",
                "sha256:9bae4b8c44b06af0e114bfc4d5f6aa3eafd2119af5a4dcab34f51f1665f16c59"
            ],
            "version": "==1.3.2"
        },
        "uritemplate": {
            "hashes": [
                "sha256:01c69f4fe8ed503b2951bef85d996a9d22434d2431584b5b107b2981ff416fbd",
                "sha256:1b9c467a940ce9fb9f50df819e8ddd14696f89b9a8cc87ac77952ba416e0a8fd",
                "sha256:c02643cebe23fc8adb5e6becffe201185bf06c40bda5c0b4028a93f1527d011d"
            ],
            "version": "==3.0.0"
        },
        "urllib3": {
            "hashes": [
                "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf",
                "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5"
            ],
            "markers": "python_version >= '2.6' and python_version != '3.0.*' and python_version != '3.2.*' and python_version != '3.1.*' and python_version != '3.3.*' and python_version < '4'",
            "version": "==1.23"
        },
        "youtube-dl": {
            "hashes": [
                "sha256:42c2e82280c943ce618969c3ceeea56666554f311e86a8082c72ec91a63885a9",
                "sha256:fc7d1c9e69c44cdf3b11b056d382502e1851bdcd900ff0ced61b6c65d2e4098c"
            ],
            "index": "pypi",
            "version": "==2018.9.8"
        },
        "zproc": {
            "editable": true,
            "git": "https://github.com/pycampers/zproc.git",
            "ref": "0f64ddb5ecf85b299c074f9440ee7be15eebb777"
        }
    },
    "develop": {
        "atom": {
            "hashes": [
                "sha256:0365437952c72843d339c69f679b6cd38ac8f699be56b70086d2c188f090839f",
                "sha256:0c3a8f982a674d6dc0bd637f7f5930662e69b26ad5f2e866aed3a8bcbcd1913b",
                "sha256:13089d12233b11198a1a09372c9f1f24524f26f291d615bb6968bcbdccb0e108",
                "sha256:1afae6b7ef17fb92b1b9cd81960022b89c0112315d7d1eba36f2d42b82aa686a",
                "sha256:243c9ed0be8b668746d9d789ee1aeb8040e5f343639652ddc1da4a1a784500ea",
                "sha256:54d30458e9d1f433911180eaba811b6aab542786d67417fc830a31494a306510",
                "sha256:5dedf4acdec1fced648f4b02aaffa0f6e8e138930334c5ba75874558dca263ca",
                "sha256:5ea08b9da01cf28279e4427821dff6c7d73e11b0ba5af4b8fc9e012435ba3bcd",
                "sha256:60ee794a3068571c7a872bca234e51c57982c5211d420c30561a987192b9c2f8",
                "sha256:6b6fb740789a4a9224045e7c64e851d89179fafe60054b45e449d400910a2762",
                "sha256:74582e79110bfde74839e6bee6c224f8d2c475eea162157a74f536e071b0e5f6",
                "sha256:76b7b25f0d5f0b1dd4f96bcf954d05ba189d376b7c7d7976a4a292864e154e44",
                "sha256:78802f83c83d8478370867dcb2334077342593c7e0270558c26cb862d0463465",
                "sha256:91071f0735e02075f8be72375df8e009e24b12053ccb3d776956ce2194fd0462",
                "sha256:94d30e7913d1cc8707240f32fa25904efa37c09169b66cd41536db8b35d1c3ad",
                "sha256:97bb7f7f8b82ea5855101a1978bf961db4de50d1b87d5e61c2694c7e59aeab43",
                "sha256:a58d568a074996e8fafdad23f2d00dfda7237416b6343fb81c2d3db4ef733024",
                "sha256:b20215353f67e24e4dbd0c8e0cc6c9f3c4a78782e73bcea035250ed59b9b7844",
                "sha256:b89940c78a00008aaf70cba56cdaae653105bfc52b123b9f171ab8dd7f566236",
                "sha256:bbca07d519defbf0d6066a725285a9b30cb8bbf7c880f602f062b83189929f2b",
                "sha256:c5971f8ac8132f5d8cac7092c8910bb4c9f93dcaad0721ebf576ca68636110ce",
                "sha256:e5b2fb5dd7ae8c1bb9d46df1b57465eb31a890d31b45e309f0d17f9dcff49c8d",
                "sha256:f79ed6880f64caa0c5fbfb39f5d2ef3afc01fd94838d4513bc045bf107876f14"
            ],
            "version": "==0.4.1"
        },
        "backcall": {
            "hashes": [
                "sha256:38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4",
                "sha256:bbbf4b1e5cd2bdb08f915895b51081c041bac22394fdfcfdfbe9f14b77c08bf2"
            ],
            "version": "==0.1.0"
        },
        "decorator": {
            "hashes": [
                "sha256:2c51dff8ef3c447388fe5e4453d24a2bf128d3a4c32af3fabef1f01c6851ab82",
                "sha256:c39efa13fbdeb4506c476c9b3babf6a718da943dab7811c206005a4a956c080c"
            ],
            "version": "==4.3.0"
        },
        "enaml": {
            "hashes": [
                "sha256:02b86079b547990d381b14808ddcc887dbc4b10c0f9487e396547d096ecc7ed4",
                "sha256:06ba3ee2d6b9f73e270013622cdf31a33f948d9728e34510fc0698987c22d0ca",
                "sha256:1ad018b65ef5fa8e1a40d14fa7296edabdaaa6040cb63ad5aee2e32669c60db1",
                "sha256:280a62ae906587929393a0b98e866c0c0e3fe8db9abc1c2da41d5d117e87dd12",
                "sha256:330e66e8266e5709094d2b6666699838dc16f0740b78c6f26e0a94443c6aa0b1",
                "sha256:3e5fd24345c9550d04f1bde98baba15b9c1d9403c0e1660e3bb4bc3306c85de3",
                "sha256:4824e9de26a7c261dfba7d0a59c4f47b4239a49efa69b6f1b0c42afecfd429db",
                "sha256:4daa3c42f3194eac7c699a0a129c358d94ad21aa746c522e823e1ca31b2c9fd8",
                "sha256:5ac759d168083e193ab3dd54d80758dc6b31b0f974367dde65d6771e8e52a4b0",
                "sha256:6c8cfd1dad5df63dc80a187599887148729eb6124d6711086a942cc43a2fe998",
                "sha256:7449209029d5a43e6668bfeb523f53901d78b8561df2687b4a372862751ccc59",
                "sha256:962a3146302c0b63800dfd25e063d044c8f83bd464ad7b49a4e2043e4a59ee6b",
                "sha256:a222dcf695e934611a960bbb7c3850a9a6a0cd48263a30f173c95e779e3a791d",
                "sha256:b1fb9e77698f16d56d4c8451c16320d848818050b19a94cafef7c902ad2d7a14",
                "sha256:d372d76e51f4daa5006d6f896c11bc8b7f85536009945865fbae766f7fc4fd46",
                "sha256:d44fe4795beea975955dd102f09d314a3ee4d67745b4d8a7899782821ea33438",
                "sha256:d5ada10215adad8970509760eb60d607a614ec07dcd38d4c24e5dc5ac1eef0a8",
                "sha256:da4ac5d0e213aa84544b37f3382cff49e8400b44034c2b4d7b868dd92b3b450e",
                "sha256:e271f350062b56153217493d6e64a50428024546a62930b1a2675e935670a618",
                "sha256:e813c5448d0f47fadd91a25a580f364fe93982a88134043995f7a77ab9675d19",
                "sha256:ecd2abd99e429831a3404877910b576d51421d6954a25a267aaa466c20e921b7",
                "sha256:f10e7c711c34f76618f54aa88aafde5e931aba2bbe8ace844f42160676f63007",
                "sha256:f9d8302e7956600053d78f6f43773d8afbcfb72ac6fa3a596882cde66f4622ce"
            ],
            "index": "pypi",
            "version": "==0.10.2"
        },
        "future": {
            "hashes": [
                "sha256:e39ced1ab767b5936646cedba8bcce582398233d6a627067d4c6a454c90cfedb"
            ],
            "version": "==0.16.0"
        },
        "ipython": {
            "hashes": [
                "sha256:007dcd929c14631f83daff35df0147ea51d1af420da303fd078343878bd5fb62",
                "sha256:b0f2ef9eada4a68ef63ee10b6dde4f35c840035c50fd24265f8052c98947d5a4"
            ],
            "index": "pypi",
            "version": "==6.5.0"
        },
        "ipython-genutils": {
            "hashes": [
                "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8",
                "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"
            ],
            "version": "==0.2.0"
        },
        "jedi": {
            "hashes": [
                "sha256:b409ed0f6913a701ed474a614a3bb46e6953639033e31f769ca7581da5bd1ec1",
                "sha256:c254b135fb39ad76e78d4d8f92765ebc9bf92cbc76f49e97ade1d5f5121e1f6f"
            ],
            "version": "==0.12.1"
        },
        "kiwisolver": {
            "hashes": [
                "sha256:0ee4ed8b3ae8f5f712b0aa9ebd2858b5b232f1b9a96b0943dceb34df2a223bc3",
                "sha256:0f7f532f3c94e99545a29f4c3f05637f4d2713e7fd91b4dd8abfc18340b86cd5",
                "sha256:1a078f5dd7e99317098f0e0d490257fd0349d79363e8c923d5bb76428f318421",
                "sha256:1aa0b55a0eb1bd3fa82e704f44fb8f16e26702af1a073cc5030eea399e617b56",
                "sha256:2874060b91e131ceeff00574b7c2140749c9355817a4ed498e82a4ffa308ecbc",
                "sha256:379d97783ba8d2934d52221c833407f20ca287b36d949b4bba6c75274bcf6363",
                "sha256:3b791ddf2aefc56382aadc26ea5b352e86a2921e4e85c31c1f770f527eb06ce4",
                "sha256:4329008a167fac233e398e8a600d1b91539dc33c5a3eadee84c0d4b04d4494fa",
                "sha256:45813e0873bbb679334a161b28cb9606d9665e70561fd6caa8863e279b5e464b",
                "sha256:53a5b27e6b5717bdc0125338a822605084054c80f382051fb945d2c0e6899a20",
                "sha256:574f24b9805cb1c72d02b9f7749aa0cc0b81aa82571be5201aa1453190390ae5",
                "sha256:66f82819ff47fa67a11540da96966fb9245504b7f496034f534b81cacf333861",
                "sha256:79e5fe3ccd5144ae80777e12973027bd2f4f5e3ae8eb286cabe787bed9780138",
                "sha256:83410258eb886f3456714eea4d4304db3a1fc8624623fc3f38a487ab36c0f653",
                "sha256:8b6a7b596ce1d2a6d93c3562f1178ebd3b7bb445b3b0dd33b09f9255e312a965",
                "sha256:9576cb63897fbfa69df60f994082c3f4b8e6adb49cccb60efb2a80a208e6f996",
                "sha256:95a25d9f3449046ecbe9065be8f8380c03c56081bc5d41fe0fb964aaa30b2195",
                "sha256:a424f048bebc4476620e77f3e4d1f282920cef9bc376ba16d0b8fe97eec87cde",
                "sha256:aaec1cfd94f4f3e9a25e144d5b0ed1eb8a9596ec36d7318a504d813412563a85",
                "sha256:acb673eecbae089ea3be3dcf75bfe45fc8d4dcdc951e27d8691887963cf421c7",
                "sha256:b15bc8d2c2848a4a7c04f76c9b3dc3561e95d4dabc6b4f24bfabe5fd81a0b14f",
                "sha256:b1c240d565e977d80c0083404c01e4d59c5772c977fae2c483f100567f50847b",
                "sha256:c595693de998461bcd49b8d20568c8870b3209b8ea323b2a7b0ea86d85864694",
                "sha256:ce3be5d520b4d2c3e5eeb4cd2ef62b9b9ab8ac6b6fedbaa0e39cdb6f50644278",
                "sha256:e0f910f84b35c36a3513b96d816e6442ae138862257ae18a0019d2fc67b041dc",
                "sha256:ea36e19ac0a483eea239320aef0bd40702404ff8c7e42179a2d9d36c5afcb55c",
                "sha256:efabbcd4f406b532206b8801058c8bab9e79645b9880329253ae3322b7b02cd5",
                "sha256:f923406e6b32c86309261b8195e24e18b6a8801df0cfc7814ac44017bfcb3939"
            ],
            "markers": "python_version >= '2.7' and python_version != '3.2.*' and python_version != '3.1.*' and python_version != '3.0.*' and python_version != '3.3.*'",
            "version": "==1.0.1"
        },
        "parso": {
            "hashes": [
                "sha256:35704a43a3c113cce4de228ddb39aab374b8004f4f2407d070b6a2ca784ce8a2",
                "sha256:895c63e93b94ac1e1690f5fdd40b65f07c8171e3e53cbd7793b5b96c0e0a7f24"
            ],
            "version": "==0.3.1"
        },
        "pexpect": {
            "hashes": [
                "sha256:2a8e88259839571d1251d278476f3eec5db26deb73a70be5ed5dc5435e418aba",
                "sha256:3fbd41d4caf27fa4a377bfd16fef87271099463e6fa73e92a52f92dfee5d425b"
            ],
            "markers": "sys_platform != 'win32'",
            "version": "==4.6.0"
        },
        "pickleshare": {
            "hashes": [
                "sha256:84a9257227dfdd6fe1b4be1319096c20eb85ff1e82c7932f36efccfe1b09737b",
                "sha256:c9a2541f25aeabc070f12f452e1f2a8eae2abd51e1cd19e8430402bdf4c1d8b5"
            ],
            "version": "==0.7.4"
        },
        "ply": {
            "hashes": [
                "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3",
                "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"
            ],
            "version": "==3.11"
        },
        "prompt-toolkit": {
            "hashes": [
                "sha256:1df952620eccb399c53ebb359cc7d9a8d3a9538cb34c5a1344bdbeb29fbcc381",
                "sha256:3f473ae040ddaa52b52f97f6b4a493cfa9f5920c255a12dc56a7d34397a398a4",
                "sha256:858588f1983ca497f1cf4ffde01d978a3ea02b01c8a26a8bbc5cd2e66d816917"
            ],
            "version": "==1.0.15"
        },
        "ptyprocess": {
            "hashes": [
                "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0",
                "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"
            ],
            "version": "==0.6.0"
        },
        "pygments": {
            "hashes": [
                "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d",
                "sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc"
            ],
            "version": "==2.2.0"
        },
        "pyqt5": {
            "hashes": [
                "sha256:700b8bb0357bf0ac312bce283449de733f5773dfc77083664be188c8e964c007",
                "sha256:76d52f3627fac8bfdbc4857ce52a615cd879abd79890cde347682ff9b4b245a2",
                "sha256:7d0f7c0aed9c3ef70d5856e99f30ebcfe25a58300158dd46ee544cbe1c5b53db",
                "sha256:d5dc2faf0aeacd0e8b69af1dc9f1276a64020193148356bb319bdfae22b78f88"
            ],
            "index": "pypi",
            "version": "==5.11.2"
        },
        "pyqt5-sip": {
            "hashes": [
                "sha256:3bcd8efae7798ce41aa7c3a052bd5ce1849f437530b8a717bae39197e780f505",
                "sha256:4a3c5767d6c238d8c62d252ac59312fac8b2264a1e8a5670081d7f3545893005",
                "sha256:67481d70fb0c7fb83e77b9025e15d0e78c7647c228eef934bd20ba716845a519",
                "sha256:7b2e563e4e56adee00101a29913fdcc49cc714f6c4f7eb35449f493c3a88fc45",
                "sha256:92a4950cba7ad7b7f67c09bdf80170ac225b38844b3a10f1271b02bace2ffc64",
                "sha256:9309c10f9e648521cfe03b62f4658dad2314f81886062cb30e0ad31b337e14b0",
                "sha256:9f524e60fa6113b50c48fbd869b2aef19833f3fe278097b1e7403e8f4dd5392c",
                "sha256:a10f59ad65b34e183853e1387b68901f473a2041f7398fac87c4e445ab149830",
                "sha256:abc2b2df469b4efb01d9dba4b804cbf0312f109ed74752dc3a37394a77d55b1f",
                "sha256:c09c17009a2dd2a6317a14d3cea9b2300fdb2206cf9bc4bae0870d1919897935",
                "sha256:c30c162e1430fd5a02207f1bd478e170c61d89fcca11ac6d8babb73cb33a86a8",
                "sha256:f00ceceef75a2140fda737bd30847ac69b7d92fbd32b6ea7b387017e72176bd8"
            ],
            "version": "==4.19.12"
        },
        "qtpy": {
            "hashes": [
                "sha256:2dbac4a848580ae03934e6deb8db65799d4bc52e1b0dd8a789067ab050c2df51",
                "sha256:5a121b42bd88df66c45e7c8d658045acdf63048666a32fb6726a826f8a232e02"
            ],
            "version": "==1.5.0"
        },
        "simplegeneric": {
            "hashes": [
                "sha256:dc972e06094b9af5b855b3df4a646395e43d1c9d0d39ed345b7393560d0b9173"
            ],
            "version": "==0.8.1"
        },
        "six": {
            "hashes": [
                "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9",
                "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"
            ],
            "version": "==1.11.0"
        },
        "traitlets": {
            "hashes": [
                "sha256:9c4bd2d267b7153df9152698efb1050a5d84982d3384a37b2c1f7723ba3e7835",
                "sha256:c6cb5e6f57c5a9bdaa40fa71ce7b4af30298fbab9ece9815b5d995ab6217c7d9"
            ],
            "version": "==4.3.2"
        },
        "wcwidth": {
            "hashes": [
                "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e",
                "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c"
            ],
            "version": "==0.1.7"
        }
    }
}

@brki
Copy link

brki commented Sep 24, 2018

@nickdani what worked for me with apache-airflow, was:

  • use pipenv version 2018.5.18
  • in Pipfile packages section, specify: apache-airflow = "==1.10.0"
  • run pipenv lock --clear

So, that worked locally.

And, after doing that, I could use the generated Pipfile.lock to re-create the virtual env with the installed airflow packages on another machine, using pipenv install --ignore-pipfile. The downside to that being that if that command is run again, it seems to ignore that the packages are already installed, and installs them again. Or it's just very slow to check that the correct versions are already installed.

@gzagatti
Copy link
Contributor

gzagatti commented Oct 5, 2018

I am having a similar problem installing apache-airflow, a simple Pipenv as below fails completely complaining about conflicting click version requirements.

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
apache-airflow = {version = "*", extras = ["postgres", "crypto"]}

[dev-packages]

[requires]
python_version = "3.6"

Unfortunately pipenv lock --clear did not help this time. When specifying a requirement for click explicitly, I get a conflict on another module, flask-login.

When installing apache-airflow directly from pip I have no problem as expected.

I'm using the latest pipenv release 2018.7.1. Any ideas?

@kyle-hamlin
Copy link

@gzagatti I'm having the same issue with Airflow. The issue is that Airflow pins flask-login to 0.2.1 but flask-appbuilder is >= 1.11.1, so that pulls in 1.12.0 which requires flask-login >= 0.3. You can pin click==6.7 and flask-appbuilder==1.11.1 BUT that uncovers the nastiest conflict of all which is not resolvable due to some bug in pip-tools (I think). Nowhere in the dependency graph is Jinja2>=2.10 but for some reason that is picked up by pipenv resolver. Since there is indeed a requirement of Jinja2<2.9.0 we find ourselves completely and utterly stuck... cheers! lol

Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
Could not find a version that matches jinja2<2.9.0,==2.8.1,>=2.10,>=2.4,>=2.5,>=2.7.3,>=2.8
Tried: 2.0, 2.1, 2.1.1, 2.2, 2.2.1, 2.3, 2.3.1, 2.4, 2.4.1, 2.5, 2.5.1, 2.5.2, 2.5.3, 2.5.4, 2.5.5, 2.6, 2.7, 2.7.1, 2.7.2, 2.7.3, 2.8, 2.8, 2.8.1, 2.8.1, 2.9, 2.9, 2.9.1, 2.9.1, 2.9.2, 2.9.2, 2.9.3, 2.9.3, 2.9.4, 2.9.4, 2.9.5, 2.9.5, 2.9.6, 2.9.6, 2.10, 2.10
Skipped pre-versions: 2.0rc1
There are incompatible versions in the resolved dependencies.

@jvstein
Copy link

jvstein commented Oct 9, 2018

@gzagatti @Mokubyow

I've got airflow 1.10 working with something like this and pipenv==2018.5.18.

[requires]
python_version = "2.7"

[packages]
apache-airflow = "==1.10.0"
flask-appbuilder = "==1.11.1"

I also have notes that these were needed:

backports_abc = ">=0.4"
singledispatch = "~=3.4"

@gzagatti
Copy link
Contributor

@jvstein. Thanks for the useful recommendation. I can report that it has worked for me. I used python_version = "3.6" instead.

@Kreshu
Copy link

Kreshu commented Jul 11, 2019

I have the issue again with apache-airflow = "==1.10.3". It worked fine, but started to fail about week ago. Dependency resolver complains about jinja2 dependency.
Is there any ongoing work on extracting the resolving mechanism from Poetry?

@karthikeayan
Copy link

Me too facing this.

@jasonnerothin
Copy link

For the airflow folks, poetry worked for me:

https://gist.github.com/jasonnerothin/aaacd3c8aec30bfca991fd04e2847ec9

@xNinjaKittyx
Copy link

I also got a similar issue today

pytest = "==3.6.4"
pytest-html = "*"

pytest-html 2.0.0 added a pytest >= 5.0, which ended up failing to lock the Pipfile... When I force pytest-html to go to 1.22.0, it'll work.

@antoncohen
Copy link

I'll add another example, using Pipenv 2018.11.26 (newest release).

These two Pipfile examples fail:

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
redis = "~=2.10"
rq = ">=0.8"

[requires]
python_version = "3.8"
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
redis = "~=2.10"
rq = "~=0.8"

[requires]
python_version = "3.8"

With this error:

[pipenv.exceptions.ResolutionFailure]: Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  First try clearing your dependency cache with $ pipenv lock --clear, then try the original command again.
 Alternatively, you can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
ERROR: ERROR: Could not find a version that matches redis>=3.0.0,~=2.10
Tried: 0.6.0, 0.6.1, 1.34, 1.34.1, 2.0.0, 2.2.0, 2.2.2, 2.2.4, 2.4.0, 2.4.1, 2.4.2, 2.4.3, 2.4.4, 2.4.5, 2.4.6, 2.4.7, 2.4.8, 2.4.9, 2.4.10, 2.4.11, 2.4.12, 2.4.13, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.7.2, 2.7.3, 2.7.4, 2.7.5, 2.7.6, 2.8.0, 2.9.0, 2.9.1, 2.10.0, 2.10.1, 2.10.2, 2.10.3, 2.10.5, 2.10.5, 2.10.6, 2.10.6, 3.0.0, 3.0.0, 3.0.0.post1, 3.0.0.post1, 3.0.1, 3.0.1, 3.1.0, 3.1.0, 3.2.0, 3.2.0, 3.2.1, 3.2.1, 3.3.0, 3.3.0, 3.3.1, 3.3.1, 3.3.2, 3.3.2, 3.3.3, 3.3.3, 3.3.4, 3.3.4, 3.3.5, 3.3.5, 3.3.6, 3.3.6, 3.3.7, 3.3.7, 3.3.8, 3.3.8, 3.3.9, 3.3.9, 3.3.10, 3.3.10, 3.3.11, 3.3.11, 3.4.0, 3.4.0, 3.4.1, 3.4.1
There are incompatible versions in the resolved dependencies.

This Pipfile works:

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
redis = "~=2.10"
rq = "<0.13,>=0.8"

[requires]
python_version = "3.8"

I resolved this by hand by looking at the setup.py for rq for every release until found the first one that required redis>=3.0.0 (rq 0.13.0).

With a constraint of rq = "~=0.8" or rq = ">=0.8" it should be able to find a valid version or rq (e.g., 0.12.0, 0.8.2, etc.). But I can't, it tries to get 0.13.0 or newer, which isn't compatible with the redis constraint.

Poetry is able to find a solution with the same constraints. I prefer the workflow of Pipenv for application development (Poetry is too library focused). But I've had these incompatible versions in the resolved dependencies errors (that I can resolve by hand) with every large application I've tried to use Pipenv with.

@techalchemy
Copy link
Member

As of the current master branch, the issue mentioned in the original post here is resolved.

@antoncohen the 2nd of your two failing examples works on the current master branch (for me anyway):

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
redis = "~=2.10"
rq = "~=0.8"

[requires]
python_version = "3.8"

The first example fails because pipenv doesn't use backtracking in it's current solver, so it doesn't understand that it needs to potentially look through all of the possible satisfying versions of each root requirement once it does initial pinning -- so, when you told it to stick with the lower version (via the ~=0.8 pin) it was able to find a satisfying resolution.

For those of you struggling with apache-airflow, I can only hope they have fixed their nightmare of a dependency situation by now. I am no longer deploying airflow at work, but when I was this was also a struggle I had to deal with. I tested this out briefly and it seems like the current release works anyway, though the release in question still fails (because they legitimately have conflicting pins)

I can't say when any of these issues were resolved, only that I thought to have a look recently and was pleasantly surprised. We still have plenty of work to do on this but the situation is dramatically improved.

Thanks for your patience all!

@aleksarias
Copy link

Is there anyway to override the version that has a conflict? I can't find how to set the version of the conflicting package. I tried setting it in the Pipfile but I still get the conflict and I can't generate the lock file.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Category: Dependency Resolution Issue relates to dependency resolution. help wanted
Projects
None yet
Development

No branches or pull requests