pradyunsg / zazo Goto Github PK
View Code? Open in Web Editor NEWPure Python Dependency Resolution (see https://github.com/sarugaku/resolvelib/ instead)
License: MIT License
Pure Python Dependency Resolution (see https://github.com/sarugaku/resolvelib/ instead)
License: MIT License
Currently, to create a test case for user reports of issues from PyPI, one needs to manually:
Ideally, there should be a script to automate parts of this flow.
@sijis and I found another conflict and we're filing according to pypa/pip#988.
[I] d518a0cf58ee803 ⚓ ~ pip install bravado boto3
Collecting bravado
Downloading bravado-9.2.2-py2.py3-none-any.whl
Collecting boto3
Downloading boto3-1.6.8-py2.py3-none-any.whl (128kB)
100% |████████████████████████████████| 133kB 9.6MB/s
Collecting requests>=2 (from bravado)
Collecting bravado-core>=4.11.0 (from bravado)
Downloading bravado_core-4.13.1-py2.py3-none-any.whl (52kB)
100% |████████████████████████████████| 61kB 40.6MB/s
Collecting pyyaml (from bravado)
Collecting six (from bravado)
Collecting msgpack-python (from bravado)
Downloading msgpack-python-0.5.6.tar.gz (138kB)
100% |████████████████████████████████| 143kB 22.0MB/s
Collecting python-dateutil (from bravado)
Collecting jmespath<1.0.0,>=0.7.1 (from boto3)
Collecting botocore<1.10.0,>=1.9.8 (from boto3)
Downloading botocore-1.9.8-py2.py3-none-any.whl (4.1MB)
100% |████████████████████████████████| 4.1MB 100.8MB/s
Collecting s3transfer<0.2.0,>=0.1.10 (from boto3)
Collecting certifi>=2017.4.17 (from requests>=2->bravado)
Collecting urllib3<1.23,>=1.21.1 (from requests>=2->bravado)
Collecting idna<2.7,>=2.5 (from requests>=2->bravado)
Collecting chardet<3.1.0,>=3.0.2 (from requests>=2->bravado)
Collecting jsonschema[format]>=2.5.1 (from bravado-core>=4.11.0->bravado)
Collecting simplejson (from bravado-core>=4.11.0->bravado)
Collecting pytz (from bravado-core>=4.11.0->bravado)
Collecting jsonref (from bravado-core>=4.11.0->bravado)
Downloading jsonref-0.1.tar.gz
Collecting swagger-spec-validator>=2.0.1 (from bravado-core>=4.11.0->bravado)
Collecting docutils>=0.10 (from botocore<1.10.0,>=1.9.8->boto3)
Collecting rfc3987; extra == "format" (from jsonschema[format]>=2.5.1->bravado-core>=4.11.0->bravado)
Collecting strict-rfc3339; extra == "format" (from jsonschema[format]>=2.5.1->bravado-core>=4.11.0->bravado)
Collecting webcolors; extra == "format" (from jsonschema[format]>=2.5.1->bravado-core>=4.11.0->bravado)
Downloading webcolors-1.8.1-py2.py3-none-any.whl
Installing collected packages: certifi, urllib3, idna, chardet, requests, rfc3987, strict-rfc3339, webcolors, jsonschema, simplejson, pytz, pyyaml, six, jsonref, swagger-spec-validator, msgpack-python, python-dateutil, bravado-core, bravado, jmespath, docutils, botocore, s3transfer, boto3
Running setup.py install for jsonref ... done
Running setup.py install for msgpack-python ... done
Successfully installed boto3-1.6.8 botocore-1.9.8 bravado-9.2.2 bravado-core-4.13.1 certifi-2018.1.18 chardet-3.0.4 docutils-0.14 idna-2.6 jmespath-0.9.3 jsonref-0.1 jsonschema-2.6.0 msgpack-python-0.5.6 python-dateutil-2.7.0 pytz-2018.3 pyyaml-3.12 requests-2.18.4 rfc3987-1.3.7 s3transfer-0.1.13 simplejson-3.13.2 six-1.11.0 strict-rfc3339-0.7 swagger-spec-validator-2.1.0 urllib3-1.22 webcolors-1.8.1
[I] d518a0cf58ee803 ⚓ ~ pip check
botocore 1.9.8 has requirement python-dateutil<2.7.0,>=2.1, but you have python-dateutil 2.7.0.
Something that occurred to me when looking at pypa/pip#5196 was that when the new resolver is added to pip, we will likely have a number of cases where the user's current installation might be inconsistent - not with the requirements being installed, but within the existing requirements. It's going to be important that the resolver handles this sort of situation gracefully.
I don't have any specific suggestions here at the moment, but I wanted to record the point while it was fresh in my mind, so it doesn't get forgotten.
This fails because sprockets.http pins tornado to a version earlier than the generally available version. This will fail without specifying any version or explicitly with pip install tornado==5.0 sprockets.http==1.5.0
.
% pip uninstall -qy tornado sprockets.http
% pip install tornado sprockets.http
Collecting tornado
Using cached tornado-5.0.tar.gz
Collecting sprockets.http
Using cached sprockets.http-1.5.0-py2.py3-none-any.whl
Installing collected packages: tornado, sprockets.http
Running setup.py install for tornado ... done
Successfully installed sprockets.http-1.5.0 tornado-5.0
% pip check
sprockets.http 1.5.0 has requirement tornado<5,>=3.1, but you have tornado 5.0.
The records[pandas]==0.5.3
depends on tablib>=0.11.4
(via install_requirements) and tablib[pandas]
(via extras_require=pandas). The tablib[pandas]
depends on pandas
(via extras_require=pandas). So pip install records[pandas]==0.5.3
should install pandas
, but it doesn't install it:
$ pip --version
pip 19.2.2 from /Users/albert/Projects/pip-tools/.venv/lib/python3.7/site-packages/pip (python 3.7)
$ pip install records[pandas]==0.5.3
Collecting records[pandas]
Using cached https://files.pythonhosted.org/packages/ef/93/2467c761ea3729713ab97842a46cc125ad09d14a0a174cb637bee4983911/records-0.5.3-py2.py3-none-any.whl
Collecting SQLAlchemy; python_version >= "3.0" (from records[pandas])
Downloading https://files.pythonhosted.org/packages/c2/75/6217c626fa22ad56ae5ccb1a36e7c4f17f5ca31543887e00179468d10464/SQLAlchemy-1.3.7.tar.gz (5.9MB)
|████████████████████████████████| 5.9MB 4.1MB/s
Collecting docopt (from records[pandas])
Using cached https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz
Collecting tablib>=0.11.4 (from records[pandas])
Downloading https://files.pythonhosted.org/packages/7b/c7/cb74031b330cd94f3580926dc707d148b4ba9138449fc9f433cb79e640d8/tablib-0.13.0-py3-none-any.whl (75kB)
|████████████████████████████████| 81kB 4.5MB/s
Collecting openpyxl<2.5.0 (from records[pandas])
Using cached https://files.pythonhosted.org/packages/77/26/0bd1a39776f53b4f28e5bb1d26b3fcd99068584a7e1ddca4e09c0d5fd592/openpyxl-2.4.11.tar.gz
Collecting backports.csv (from tablib>=0.11.4->records[pandas])
Using cached https://files.pythonhosted.org/packages/8e/26/a6bd68f13e0f38fbb643d6e497fc3462be83a0b6c4d43425c78bb51a7291/backports.csv-1.0.7-py2.py3-none-any.whl
Collecting xlrd (from tablib>=0.11.4->records[pandas])
Using cached https://files.pythonhosted.org/packages/b0/16/63576a1a001752e34bf8ea62e367997530dc553b689356b9879339cf45a4/xlrd-1.2.0-py2.py3-none-any.whl
Collecting xlwt (from tablib>=0.11.4->records[pandas])
Using cached https://files.pythonhosted.org/packages/44/48/def306413b25c3d01753603b1a222a011b8621aed27cd7f89cbc27e6b0f4/xlwt-1.3.0-py2.py3-none-any.whl
Collecting pyyaml (from tablib>=0.11.4->records[pandas])
Collecting odfpy (from tablib>=0.11.4->records[pandas])
Using cached https://files.pythonhosted.org/packages/85/7d/8f6d1f2a4683be362b101c00232b4c3839e4e4a90e0945d8d43ec6aa671d/odfpy-1.4.0.tar.gz
Collecting jdcal (from openpyxl<2.5.0->records[pandas])
Using cached https://files.pythonhosted.org/packages/f0/da/572cbc0bc582390480bbd7c4e93d14dc46079778ed915b505dc494b37c57/jdcal-1.4.1-py2.py3-none-any.whl
Collecting et_xmlfile (from openpyxl<2.5.0->records[pandas])
Using cached https://files.pythonhosted.org/packages/22/28/a99c42aea746e18382ad9fb36f64c1c1f04216f41797f2f0fa567da11388/et_xmlfile-1.0.1.tar.gz
Collecting defusedxml (from odfpy->tablib>=0.11.4->records[pandas])
Using cached https://files.pythonhosted.org/packages/06/74/9b387472866358ebc08732de3da6dc48e44b0aacd2ddaa5cb85ab7e986a2/defusedxml-0.6.0-py2.py3-none-any.whl
Building wheels for collected packages: SQLAlchemy, docopt, openpyxl, odfpy, et-xmlfile
Building wheel for SQLAlchemy (setup.py) ... done
Created wheel for SQLAlchemy: filename=SQLAlchemy-1.3.7-cp37-cp37m-macosx_10_14_x86_64.whl size=1145604 sha256=5397c866669ee8461c23ce93e38c11eaa3783f08e835c961d1663bfb374cef4f
Stored in directory: /Users/albert/Library/Caches/pip/wheels/80/e0/68/3d11cc7209b5bd2c7d55cbb56c6bda843cc82f77c8387468ea
Building wheel for docopt (setup.py) ... done
Created wheel for docopt: filename=docopt-0.6.2-py2.py3-none-any.whl size=13704 sha256=97b55e96cd59a303ecd1b5c514f1c9953c4d92085e57d8feeaa7382f955c0da2
Stored in directory: /Users/albert/Library/Caches/pip/wheels/9b/04/dd/7daf4150b6d9b12949298737de9431a324d4b797ffd63f526e
Building wheel for openpyxl (setup.py) ... done
Created wheel for openpyxl: filename=openpyxl-2.4.11-py2.py3-none-any.whl size=222820 sha256=98c8b31114291ed8ab8fc6e2f95173fec10993b41733296a19aed0ef76dce57d
Stored in directory: /Users/albert/Library/Caches/pip/wheels/59/44/27/63b211425501ad51d197ff8ed00e9e469e38b9e516cb69b1c2
Building wheel for odfpy (setup.py) ... done
Created wheel for odfpy: filename=odfpy-1.4.0-py2.py3-none-any.whl size=137219 sha256=a423bce5e06e8dca85dfb13d4f3ec22dbb02004f4e2cf438d661a9c026b18f5c
Stored in directory: /Users/albert/Library/Caches/pip/wheels/06/2d/19/f5a4eed468fecff295ff8ac49e5dd5fb22d7ffc7ff072deabf
Building wheel for et-xmlfile (setup.py) ... done
Created wheel for et-xmlfile: filename=et_xmlfile-1.0.1-cp37-none-any.whl size=8914 sha256=9308fef4af95b86f18f79ac5ddf4e859bb9193aee7048373ec345f0374772e6b
Stored in directory: /Users/albert/Library/Caches/pip/wheels/2a/77/35/0da0965a057698121fc7d8c5a7a9955cdbfb3cc4e2423cad39
Successfully built SQLAlchemy docopt openpyxl odfpy et-xmlfile
Installing collected packages: SQLAlchemy, docopt, backports.csv, xlrd, jdcal, et-xmlfile, openpyxl, xlwt, pyyaml, defusedxml, odfpy, tablib, records
Successfully installed SQLAlchemy-1.3.7 backports.csv-1.0.7 defusedxml-0.6.0 docopt-0.6.2 et-xmlfile-1.0.1 jdcal-1.4.1 odfpy-1.4.0 openpyxl-2.4.11 pyyaml-5.1.2 records-0.5.3 tablib-0.13.0 xlrd-1.2.0 xlwt-1.3.0
Hope it helps someday.
pip install flake8-import-order==0.17.1 pytest-flake8==1.0.0
flake8 3.5.0 has requirement pycodestyle<2.4.0,>=2.0.0, but you'll have pycodestyle 2.4.0 which is incompatible.
Installing collected packages: pycodestyle, flake8-import-order, pyflakes, mccabe, flake8, six, more-itertools, attrs, pluggy, py, pytest, pytest-flake8
Successfully installed attrs-17.4.0 flake8-3.5.0 flake8-import-order-0.17.1 mccabe-0.6.1 more-itertools-4.1.0 pluggy-0.6.0 py-1.5.3 pycodestyle-2.4.0 pyflakes-1.6.0 pytest-3.5.0 pytest-flake8-1.0.0 six-1.11.0
edit: This is actually with pip 10.0.1
.
Or do dependencies need to resolve markers to decide whether it is needed on the way in? I’m looking into the possibility of building a environment-independent dependency resolver, and is intrigued to learn that pip has plans to build one itself. Due to pip’s nature (it only needs to know how to work out dependencies on the platform it is currently running on), I’m wondering if this fits my need, or if I need to look elsewhere.
In our project we install dependencies from 2 large subprojects. Installation command looks like:
pip install -r requirements.txt
pip install -r subproject/requirements.txt
or in CI builds it looks like:
pip install -r requirements.txt subproject/requirements.txt
Will this new package resolver be able to handle conflicts in such conditions (when it installs them from multiple requirements) ?
Currently, we have made our own checker (run with py.test) which manually reads requirements.txt
and subproject/requirements.txt
using pip.req.parse_requirements()
and compares them.
And all our deps with transitive deps are freezed (using "==").
Also, we have freezed deps in many our internal pip packages. But eventually this makes upgrading one small dependency to hell. So we don't like our solution and treat it rather as a workaround.
Recently pip (in version 10+) made req
an internal package. So it's kind of hiding this hole from us :-(
This creates issues while installing elasticsearch
and requests
together.
Output:
$ pip3 install elasticsearch==7.0.0 requests==2.21.0
Collecting elasticsearch==7.0.0
Using cached https://files.pythonhosted.org/packages/a8/27/d3a9ecd9f8f972d99da98672d4766b9f62ef64c323c40bb5e2557e538ea3/elasticsearch-7.0.0-py2.py3-none-any.whl
Collecting requests==2.21.0
Using cached https://files.pythonhosted.org/packages/7d/e3/20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/requests-2.21.0-py2.py3-none-any.whl
Collecting urllib3>=1.21.1 (from elasticsearch==7.0.0)
Using cached https://files.pythonhosted.org/packages/39/ec/d93dfc69617a028915df914339ef66936ea976ef24fa62940fd86ba0326e/urllib3-1.25.2-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests==2.21.0)
Using cached https://files.pythonhosted.org/packages/60/75/f692a584e85b7eaba0e03827b3d51f45f571c2e793dd731e598828d380aa/certifi-2019.3.9-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests==2.21.0)
Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl
Collecting idna<2.9,>=2.5 (from requests==2.21.0)
Using cached https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl
requests 2.21.0 has requirement urllib3<1.25,>=1.21.1, but you'll have urllib3 1.25.2 which is incompatible.
Installing collected packages: urllib3, elasticsearch, certifi, chardet, idna, requests
Successfully installed certifi-2019.3.9 chardet-3.0.4 elasticsearch-7.0.0 idna-2.8 requests-2.21.0 urllib3-1.25.2
The output above has this warning:
requests 2.21.0 has requirement urllib3<1.25,>=1.21.1, but you'll have urllib3 1.25.2 which is incompatible.
The installed version of urllib3
(urllib3 1.25.2
) violates the requirement specifier for urllib3
specified by requests 2.21.0
? The required dependencies are:
elasticsearch==7.0.0
requires urllib3>=1.21.1
(source)requests==2.21.0
requires urllib3>=1.21.1,<1.25
(source)Both dependency specifiers could have been easily satisfied by installing urllib3 1.24.3
. But pip3
then installed urllib3 1.25.2
instead which violates the second specifier.
See this Stack Overflow thread for related discussion: https://stackoverflow.com/q/56096643/1175080.
Originally posted by @lonelearner in pypa/pip#988 (comment)
Pip loops itself after invoking pip install -r requirements.txt --use-feature=2020-resolver
(more than 1 hour):
…
Requirement already satisfied: six>=1.4.1 in /usr/local/lib/python3.7/site-packages (from cryptography==3.0->-r requirements.txt (line 4)) (1.15.0)
Requirement already satisfied: internal-lib3<5dev,>=4.0.1 in /usr/local/lib/python3.7/site-packages (from internal-lib5>=0.13.2->internal-lib2==6.0.1->-r requirements.txt (line 29)) (4.3)
Requirement already satisfied: internal-lib1>=0.4.7 in /usr/local/lib/python3.7/site-packages (from internal-lib5>=0.13.2->internal-lib2==6.0.1->-r requirements.txt (line 29)) (0.4.10)
Same loop with -v
flag (pip install -r requirements.txt --use-feature=2020-resolver -v
):
…
Requirement already satisfied: six>=1.4.1 in environment/lib/python3.6/site-packages (from cryptography==3.0->-r requirements.txt (line 4)) (1.14.0)
1 location(s) to search for versions of six:
* https://self-hosted-devpi/+simple/six/
Fetching project page and analyzing links: https://self-hosted-devpi/+simple/six/
Getting page https://self-hosted-devpi/+simple/six/
Looking up "https://self-hosted-devpi/+simple/six/" in the cache
Request header has "max_age" as 0, cache bypassed
https://devpi.yougov.net:443 "GET /+simple/six/ HTTP/1.1" 200 16235
Updating cache with response from "https://self-hosted-devpi/+simple/six/"
Found link https://self-hosted-devpi/%2Bf/306/39c035cdb2353/six-1.15.0.tar.gz#sha256=30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259 (from https://self-hosted-devpi/+simple/six/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*), version: 1.15.0
…
Found link https://self-hosted-devpi/%2Bf/14f/d1ed3dd0e1a46/six-0.9.0.tar.gz#sha256=14fd1ed3dd0e1a46cc53b8fc890b5a3b11737515aeb7f42c3af9f38e8d8975d7 (from https://self-hosted-devpi/+simple/six/), version: 0.9.0
Given no hashes to check 12 links for project 'six': discarding no candidates
Requirement already satisfied: internal-lib1>=0.4.7 in environment/lib/python3.6/site-packages (from internal-lib5>=0.13.2->internal-lib2==6.0.1->-r requirements.txt (line 29)) (0.4.10)
1 location(s) to search for versions of internal-lib1:
* https://self-hosted-devpi/+simple/internal-lib1/
Fetching project page and analyzing links: https://self-hosted-devpi/+simple/internal-lib1/
Getting page https://self-hosted-devpi/+simple/internal-lib1/
Looking up "https://self-hosted-devpi/+simple/internal-lib1/" in the cache
Request header has "max_age" as 0, cache bypassed
https://devpi.yougov.net:443 "GET /+simple/internal-lib1/ HTTP/1.1" 200 13870
Updating cache with response from "https://self-hosted-devpi/+simple/internal-lib1/"
Found link https://self-hosted-devpi/%2Bf/674/b54a83be61d7e/internal-lib1-0.4.4-py2.py3-none-any.whl#sha256=674b54a83be61d7e5488edf33ac4846d4eb19b54eb662b37a1a3dcbe146d3f71 (from https://self-hosted-devpi/+simple/internal-lib1/), version: 0.4.4
…
Found link https://self-hosted-devpi/%2Bf/5db/e47a27ce7d29e/internal-lib1-0.3.1.tar.gz#sha256=5dbe47a27ce7d29ee0321b9252f4d00232a17042ad160861f2fc449928328d53 (from https://self-hosted-devpi/+simple/internal-lib1/), version: 0.3.1
Given no hashes to check 8 links for project 'internal-lib1': discarding no candidates
Requirement already satisfied: internal-lib3<5dev,>=4.0.1 in environment/lib/python3.6/site-packages (from internal-lib5>=0.13.2->internal-lib2==6.0.1->-r requirements.txt (line 29)) (4.3)
1 location(s) to search for versions of internal-lib1:
* https://self-hosted-devpi/+simple/internal-lib1/
Fetching project page and analyzing links: https://self-hosted-devpi/+simple/internal-lib1/
Getting page https://self-hosted-devpi/+simple/internal-lib1/
Looking up "https://self-hosted-devpi/+simple/internal-lib1/" in the cache
Request header has "max_age" as 0, cache bypassed
https://devpi.yougov.net:443 "GET /+simple/internal-lib1/ HTTP/1.1" 200 9900
Updating cache with response from "https://self-hosted-devpi/+simple/internal-lib1/"
Found link https://self-hosted-devpi/%2Bf/ad9/b1e001e1b51f2/internal-lib3-4.1.tar.gz#sha256=ad9b1e001e1b51f2305275717e451e6d8b81b54fa621030284b7c49f11a8ace4 (from https://self-hosted-devpi/+simple/internal-lib1/), version: 4.1
…
Found link https://self-hosted-devpi/%2Bf/11c/81413452f331c/internal-lib3-3.3.tar.gz#sha256=11c81413452f331cc75e09c0b1c424d1574a1f9d7c2c63d70cc60e66871839aa (from https://self-hosted-devpi/+simple/internal-lib1/), version: 3.3
Given no hashes to check 9 links for project 'internal-lib1': discarding no candidates
1 location(s) to search for versions of marshmallow:
* https://self-hosted-devpi/+simple/marshmallow/
Fetching project page and analyzing links: https://self-hosted-devpi/+simple/marshmallow/
Getting page https://self-hosted-devpi/+simple/marshmallow/
Looking up "https://self-hosted-devpi/+simple/marshmallow/" in the cache
Request header has "max_age" as 0, cache bypassed
https://devpi.yougov.net:443 "GET /+simple/marshmallow/ HTTP/1.1" 200 70169
Updating cache with response from "https://self-hosted-devpi/+simple/marshmallow/"
Found link https://self-hosted-devpi/%2Bf/a2a/5eefb4b75a3b4/marshmallow-3.7.1.tar.gz#sha256=a2a5eefb4b75a3b43f05be1cca0b6686adf56af7465c3ca629e5ad8d1e1fe13d (from https://self-hosted-devpi/+simple/marshmallow/) (requires-python:>=3.5), version: 3.7.1
…
Found link https://devpi.yougov.net/root/pypi/%2Bf/b2a/6f1df3c475cd9/marshmallow-0.1.0-py2.py3-none-any.whl#sha256=b2a6f1df3c475cd9c1ae29d9ef46ab1f24110bf7721d4e91c8ee90e2eaf604e8 (from https://devpi.yougov.net/+simple/marshmallow/), version: 0.1.0
Given no hashes to check 0 links for project 'marshmallow': discarding no candidates
Collecting marshmallow-oneofschema<3.0.0,>=2.0.0.post0
Created temporary directory: /private/var/folders/22/_y1ydpt97v70hqfj5f7wvy740000gp/T/pip-unpack-q1p0op6g
Looking up "https://self-hosted-devpi/%2Bf/296/73bcc415f4a20/marshmallow_oneofschema-2.0.1-py2.py3-none-any.whl" in the cache
Current age based on date: 2114
Ignoring unknown cache-control directive: immutable
Freshness lifetime from max-age: 365000000
The response is "fresh", returning cached response
365000000 > 2114
Using cached https://self-hosted-devpi/%2Bf/296/73bcc415f4a20/marshmallow_oneofschema-2.0.1-py2.py3-none-any.whl (5.7 kB)
Added marshmallow-oneofschema<3.0.0,>=2.0.0.post0 from https://self-hosted-devpi/%2Bf/296/73bcc415f4a20/marshmallow_oneofschema-2.0.1-py2.py3-none-any.whl#sha256=29673bcc415f4a2098e273bf3c8229bc1a33e91378885eac90b06943bd626110 (from internal-lib4==0.15.0->-r requirements.txt (line 30)) to build tracker '/private/var/folders/22/_y1ydpt97v70hqfj5f7wvy740000gp/T/pip-req-tracker-ojo8i3cq'
Removed marshmallow-oneofschema<3.0.0,>=2.0.0.post0 from https://self-hosted-devpi/%2Bf/296/73bcc415f4a20/marshmallow_oneofschema-2.0.1-py2.py3-none-any.whl#sha256=29673bcc415f4a2098e273bf3c8229bc1a33e91378885eac90b06943bd626110 (from internal-lib4==0.15.0->-r requirements.txt (line 30)) from build tracker '/private/var/folders/22/_y1ydpt97v70hqfj5f7wvy740000gp/T/pip-req-tracker-ojo8i3cq'
1 location(s) to search for versions of marshmallow:
* https://self-hosted-devpi/+simple/marshmallow/
Fetching project page and analyzing links: https://self-hosted-devpi/+simple/marshmallow/
Getting page https://self-hosted-devpi/+simple/marshmallow/
Looking up "https://self-hosted-devpi/+simple/marshmallow/" in the cache
Request header has "max_age" as 0, cache bypassed
https://devpi.yougov.net:443 "GET /+simple/marshmallow/ HTTP/1.1" 200 70169
Updating cache with response from "https://self-hosted-devpi/+simple/marshmallow/"
Found link https://self-hosted-devpi/%2Bf/a2a/5eefb4b75a3b4/marshmallow-3.7.1.tar.gz#sha256=a2a5eefb4b75a3b43f05be1cca0b6686adf56af7465c3ca629e5ad8d1e1fe13d (from https://self-hosted-devpi/+simple/marshmallow/) (requires-python:>=3.5), version: 3.7.1
Given no hashes to check 0 links for project 'marshmallow': discarding no candidates
Collecting internal-lib5>=0.13.2
Created temporary directory: /private/var/folders/22/_y1ydpt97v70hqfj5f7wvy740000gp/T/pip-unpack-ffx_i25r
Looking up "https://self-hosted-devpi/%2Bf/f5d/75b9548e314c7/internal-lib5-0.13.3-py2.py3-none-any.whl" in the cache
Current age based on date: 2114
Ignoring unknown cache-control directive: immutable
Freshness lifetime from max-age: 365000000
The response is "fresh", returning cached response
365000000 > 2114
Using cached https://self-hosted-devpi/%2Bf/f5d/75b9548e314c7/internal-lib5-0.13.3-py2.py3-none-any.whl (13 kB)
Added internal-lib5>=0.13.2 from https://self-hosted-devpi/%2Bf/f5d/75b9548e314c7/internal-lib5-0.13.3-py2.py3-none-any.whl#sha256=f5d75b9548e314c7a47301cae5daecb1c1167165f3f249dbef3779d81d5a7875 (from internal-lib2==6.0.1->-r requirements.txt (line 29)) to build tracker '/private/var/folders/22/_y1ydpt97v70hqfj5f7wvy740000gp/T/pip-req-tracker-ojo8i3cq'
Removed internal-lib5>=0.13.2 from https://self-hosted-devpi/%2Bf/f5d/75b9548e314c7/internal-lib5-0.13.3-py2.py3-none-any.whl#sha256=f5d75b9548e314c7a47301cae5daecb1c1167165f3f249dbef3779d81d5a7875 (from internal-lib2==6.0.1->-r requirements.txt (line 29)) from build tracker '/private/var/folders/22/_y1ydpt97v70hqfj5f7wvy740000gp/T/pip-req-tracker-ojo8i3cq'
Requirement already satisfied: six>=1.4.1 in environment/lib/python3.6/site-packages (from cryptography==3.0->-r requirements.txt (line 4)) (1.14.0)
… [looped]
On the other hand minimal reproducible example finds conflict quickly:
ERROR: Cannot install marshmallow==3.0.0b12, internal-lib4 0.15.0, marshmallow-oneofschema 2.0.1, marshmallow==3.0.0b12, internal-lib4 0.15.0 and internal-lib4 because these package versions have conflicting dependencies.
The conflict is caused by:
The user requested marshmallow==3.0.0b12
internal-lib4 0.15.0 depends on marshmallow<=3.0.0rc6 and >=3.0.0b12
marshmallow-oneofschema 2.0.1 depends on marshmallow<4.0.0 and >=3.0.0rc6
The user requested marshmallow==3.0.0b12
internal-lib4 0.15.0 depends on marshmallow<=3.0.0rc6 and >=3.0.0b12
marshmallow-oneofschema 2.0.0.post0 depends on marshmallow<4.0.0 and >=3.0.0rc6
To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict
ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/user_guide/#fixing-conflicting-dependencies
Minimal requirements with conflict:
cryptography==3.0
internal-lib2==6.0.1
internal-lib4==0.15.0
marshmallow==3.0.0b12
Where:
By the way, thank you for your work on pip!
See pypa/pip#4887 for example of dependency resolution problem with pip9 between cherrypy
, cheroot
and six
. To reproduce:
$ pip uninstall cherrypy cheroot six
$ pip install six==1.10.0
$ pip install cherrypy==11.0.0
$ pip check
cheroot 5.10.0 has requirement six>=1.11.0, but you have six 1.10.0.
( Re-reporting, as requested in pypa/pip#988 (comment) )
Following the suggestion in pypa/pip#988 (comment) I am submitting this test case here.
Instead of just repeating myself, the issue is pypa/pip#6494 (and some additional info are in the linked tickets from there).
Not sure if that is in scope with the new dependency resolver, but mentioning it and let you think about it for a moment can't hurt.
The fact that this is being developed as a standalone project may mean this is obvious, but it would be good to consider if the resolver could have a documented/supported API. One of the big areas where people currently importing pip have very few alternative options is when looking at "what would pip install given this set of requirements?" Having pip's resolver available as a standalone library would potentially be a useful option for such people.
Note - I understand how much work maintaining such an API could be, so I'm completely OK with the resolver being designed solely as a component of pip, if that's easier to do. But it's probably worth considering the possibility.
20.0.2-601-g97f63905
3.8.2
linux
x86_64
$ pip install --unstable-feature=resolver 'pyrax==1.9.8'
<snip (downloads many versions of dependencies)>
ERROR: Exception:
Traceback (most recent call last):
File "/home/andy/.local/share/venvs/2afbbd2099b62f67e7705a9c91295494/venv/lib/python3.8/site-packages/pip/_internal/cli/base_command.py", line 199, in _main
status = self.run(options, args)
File "/home/andy/.local/share/venvs/2afbbd2099b62f67e7705a9c91295494/venv/lib/python3.8/site-packages/pip/_internal/cli/req_command.py", line 185, in wrapper
return func(self, options, args)
File "/home/andy/.local/share/venvs/2afbbd2099b62f67e7705a9c91295494/venv/lib/python3.8/site-packages/pip/_internal/commands/install.py", line 332, in run
requirement_set = resolver.resolve(
File "/home/andy/.local/share/venvs/2afbbd2099b62f67e7705a9c91295494/venv/lib/python3.8/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 80, in resolve
self._result = resolver.resolve(requirements)
File "/home/andy/.local/share/venvs/2afbbd2099b62f67e7705a9c91295494/venv/lib/python3.8/site-packages/pip/_vendor/resolvelib/resolvers.py", line 413, in resolve
state = resolution.resolve(requirements, max_rounds=max_rounds)
File "/home/andy/.local/share/venvs/2afbbd2099b62f67e7705a9c91295494/venv/lib/python3.8/site-packages/pip/_vendor/resolvelib/resolvers.py", line 323, in resolve
raise ResolutionTooDeep(max_rounds)
pip._vendor.resolvelib.resolvers.ResolutionTooDeep: 100
poetry 1.0.5
pyproject.toml
:
[tool.poetry]
name = "fake-for-pyrax"
version = "0.1.0"
description = ""
authors = ["Your Name <[email protected]>"]
[tool.poetry.dependencies]
python = "^3.8"
pyrax = "1.9.8"
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
$ poetry lock
Updating dependencies
Resolving dependencies... (10.5s)
Writing lock file
poetry.lock
:
[[package]]
category = "main"
description = "Python command-line parsing library"
name = "argparse"
optional = false
python-versions = "*"
version = "1.4.0"
[[package]]
category = "main"
description = "Internationalization utilities"
name = "babel"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "2.8.0"
[package.dependencies]
pytz = ">=2015.7"
[[package]]
category = "main"
description = "Python package for providing Mozilla's CA Bundle."
name = "certifi"
optional = false
python-versions = "*"
version = "2020.4.5.1"
[[package]]
category = "main"
description = "Foreign Function Interface for Python calling C code."
marker = "sys_platform == \"linux\""
name = "cffi"
optional = false
python-versions = "*"
version = "1.14.0"
[package.dependencies]
pycparser = "*"
[[package]]
category = "main"
description = "Universal encoding detector for Python 2 and 3"
name = "chardet"
optional = false
python-versions = "*"
version = "3.0.4"
[[package]]
category = "main"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
marker = "sys_platform == \"linux\""
name = "cryptography"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*"
version = "2.9"
[package.dependencies]
cffi = ">=1.8,<1.11.3 || >1.11.3"
six = ">=1.4.1"
[package.extras]
docs = ["sphinx (>=1.6.5,<1.8.0 || >1.8.0)", "sphinx-rtd-theme"]
docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
idna = ["idna (>=2.1)"]
pep8test = ["flake8", "flake8-import-order", "pep8-naming"]
test = ["pytest (>=3.6.0,<3.9.0 || >3.9.0,<3.9.1 || >3.9.1,<3.9.2 || >3.9.2)", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,<3.79.2 || >3.79.2)"]
[[package]]
category = "main"
description = "A collection of Python deprecation patterns and strategies that help you collect your technical debt in a non-destructive manner."
name = "debtcollector"
optional = false
python-versions = "*"
version = "1.11.0"
[package.dependencies]
pbr = ">=1.8"
six = ">=1.9.0"
wrapt = ">=1.7.0"
[[package]]
category = "main"
description = "Internationalized Domain Names in Applications (IDNA)"
name = "idna"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "2.9"
[[package]]
category = "main"
description = "Adds Rackspace ip_associations support to python-novaclient"
name = "ip-associations-python-novaclient-ext"
optional = false
python-versions = "*"
version = "0.2"
[package.dependencies]
python-novaclient = "*"
[[package]]
category = "main"
description = "Simple module to parse ISO 8601 dates"
name = "iso8601"
optional = false
python-versions = "*"
version = "0.1.12"
[[package]]
category = "main"
description = "Low-level, pure Python DBus protocol wrapper."
marker = "sys_platform == \"linux\""
name = "jeepney"
optional = false
python-versions = ">=3.5"
version = "0.4.3"
[package.extras]
dev = ["testpath"]
[[package]]
category = "main"
description = "Store and access your passwords safely."
name = "keyring"
optional = false
python-versions = ">=3.6"
version = "21.2.0"
[package.dependencies]
SecretStorage = ">=3"
jeepney = ">=0.4.2"
pywin32-ctypes = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"]
testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-black-multipy", "pytest-cov"]
[[package]]
category = "main"
description = "Authentication Library for OpenStack Identity"
name = "keystoneauth1"
optional = false
python-versions = "*"
version = "2.18.0"
[package.dependencies]
iso8601 = ">=0.1.11"
pbr = ">=1.8"
positional = ">=1.1.1"
requests = ">=2.10.0,<2.12.2 || >2.12.2"
six = ">=1.9.0"
stevedore = ">=1.17.1"
[package.extras]
betamax = ["betamax (>=0.7.0)", "fixtures (>=3.0.0)", "mock (>=2.0)"]
kerberos = ["requests-kerberos (>=0.6)"]
oauth1 = ["oauthlib (>=0.6)"]
saml2 = ["lxml (>=2.3,<3.7.0 || >3.7.0)"]
[[package]]
category = "main"
description = "Rolling backport of unittest.mock for all Pythons"
name = "mock"
optional = false
python-versions = ">=3.6"
version = "4.0.2"
[package.extras]
build = ["twine", "wheel", "blurb"]
docs = ["sphinx"]
test = ["pytest", "pytest-cov"]
[[package]]
category = "main"
description = "An implementation of time.monotonic() for Python 2 & < 3.3"
name = "monotonic"
optional = false
python-versions = "*"
version = "1.5"
[[package]]
category = "main"
description = "MessagePack (de)serializer."
name = "msgpack-python"
optional = false
python-versions = "*"
version = "0.5.6"
[[package]]
category = "main"
description = "A network address manipulation library for Python"
name = "netaddr"
optional = false
python-versions = "*"
version = "0.7.19"
[[package]]
category = "main"
description = "Portable network interface information."
name = "netifaces"
optional = false
python-versions = "*"
version = "0.10.9"
[[package]]
category = "main"
description = "Disk Config extension for python-novaclient"
name = "os-diskconfig-python-novaclient-ext"
optional = false
python-versions = "*"
version = "0.1.3"
[package.dependencies]
python-novaclient = "*"
[[package]]
category = "main"
description = "Adds rackspace networks support to python-novaclient"
name = "os-networksv2-python-novaclient-ext"
optional = false
python-versions = "*"
version = "0.26"
[package.dependencies]
python-novaclient = "*"
[[package]]
category = "main"
description = "Adds Virtual Interfaces support to python-novaclient"
name = "os-virtual-interfacesv2-python-novaclient-ext"
optional = false
python-versions = "*"
version = "0.20"
[package.dependencies]
python-novaclient = "*"
[[package]]
category = "main"
description = "Oslo Configuration API"
name = "oslo.config"
optional = false
python-versions = "*"
version = "4.12.0"
[package.dependencies]
PyYAML = ">=3.10"
debtcollector = ">=1.2.0"
netaddr = ">=0.7.13,<0.7.16 || >0.7.16"
"oslo.i18n" = ">=2.1.0,<3.15.2 || >3.15.2"
rfc3986 = ">=0.3.1"
six = ">=1.9.0"
stevedore = ">=1.20.0"
[[package]]
category = "main"
description = "Oslo i18n library"
name = "oslo.i18n"
optional = false
python-versions = "*"
version = "3.12.0"
[package.dependencies]
Babel = ">=2.3.4"
pbr = ">=1.8"
six = ">=1.9.0"
[[package]]
category = "main"
description = "Oslo Serialization library"
name = "oslo.serialization"
optional = false
python-versions = "*"
version = "2.16.1"
[package.dependencies]
msgpack-python = ">=0.4.0"
"oslo.utils" = ">=3.18.0"
pbr = ">=1.8"
pytz = ">=2013.6"
six = ">=1.9.0"
[[package]]
category = "main"
description = "Oslo Utility library"
name = "oslo.utils"
optional = false
python-versions = "*"
version = "3.22.3"
[package.dependencies]
debtcollector = ">=1.2.0"
iso8601 = ">=0.1.11"
monotonic = ">=0.6"
netaddr = ">=0.7.13,<0.7.16 || >0.7.16"
netifaces = ">=0.10.4"
"oslo.i18n" = ">=2.1.0"
pbr = ">=1.8"
pyparsing = ">=2.1.0"
pytz = ">=2013.6"
six = ">=1.9.0"
[[package]]
category = "main"
description = "Python Build Reasonableness"
name = "pbr"
optional = false
python-versions = "*"
version = "1.10.0"
[[package]]
category = "main"
description = "Library to enforce positional or key-word arguments (deprecated/unmaintained)"
name = "positional"
optional = false
python-versions = "*"
version = "1.2.1"
[package.dependencies]
pbr = ">=1.8"
wrapt = "*"
[[package]]
category = "main"
description = "A simple Python library for easily displaying tabular data in a visually appealing ASCII table format."
name = "prettytable"
optional = false
python-versions = "*"
version = "0.7.2"
[[package]]
category = "main"
description = "C parser in Python"
marker = "sys_platform == \"linux\""
name = "pycparser"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "2.20"
[[package]]
category = "main"
description = "Python parsing module"
name = "pyparsing"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
version = "2.4.7"
[[package]]
category = "main"
description = "Python language bindings for OpenStack Clouds."
name = "pyrax"
optional = false
python-versions = "*"
version = "1.9.8"
[package.dependencies]
keyring = "*"
mock = "*"
python-novaclient = "2.27.0"
rackspace-novaclient = "*"
requests = ">=2.2.1,<3"
six = ">=1.9.0,<2"
[[package]]
category = "main"
description = "Client Library for OpenStack Identity"
name = "python-keystoneclient"
optional = false
python-versions = "*"
version = "3.10.0"
[package.dependencies]
debtcollector = ">=1.2.0"
keystoneauth1 = ">=2.18.0"
"oslo.config" = ">=3.14.0,<3.18.0 || >3.18.0"
"oslo.i18n" = ">=2.1.0"
"oslo.serialization" = ">=1.10.0"
"oslo.utils" = ">=3.18.0"
pbr = ">=1.8"
positional = ">=1.1.1"
requests = ">=2.10.0,<2.12.2 || >2.12.2"
six = ">=1.9.0"
stevedore = ">=1.17.1"
[[package]]
category = "main"
description = "Client library for OpenStack Compute API"
name = "python-novaclient"
optional = false
python-versions = "*"
version = "2.27.0"
[package.dependencies]
Babel = ">=1.3"
PrettyTable = ">=0.7,<0.8"
argparse = "*"
iso8601 = ">=0.1.9"
"oslo.i18n" = ">=1.5.0"
"oslo.serialization" = ">=1.4.0"
"oslo.utils" = ">=2.0.0"
pbr = ">=1.6,<2.0"
python-keystoneclient = ">=1.6.0"
requests = ">=2.5.2"
simplejson = ">=2.2.0"
six = ">=1.9.0"
[[package]]
category = "main"
description = "World timezone definitions, modern and historical"
name = "pytz"
optional = false
python-versions = "*"
version = "2019.3"
[[package]]
category = "main"
description = ""
marker = "sys_platform == \"win32\""
name = "pywin32-ctypes"
optional = false
python-versions = "*"
version = "0.2.0"
[[package]]
category = "main"
description = "YAML parser and emitter for Python"
name = "pyyaml"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "5.3.1"
[[package]]
category = "main"
description = "Rackspace Auth Plugin for OpenStack Clients."
name = "rackspace-auth-openstack"
optional = false
python-versions = "*"
version = "1.3"
[package.dependencies]
python-novaclient = "*"
[[package]]
category = "main"
description = "Metapackage to install python-novaclient and Rackspace extensions"
name = "rackspace-novaclient"
optional = false
python-versions = "*"
version = "2.1"
[package.dependencies]
ip_associations_python_novaclient_ext = "*"
os_diskconfig_python_novaclient_ext = "*"
os_networksv2_python_novaclient_ext = "*"
os_virtual_interfacesv2_python_novaclient_ext = "*"
python-novaclient = "*"
rackspace-auth-openstack = "*"
rax_default_network_flags_python_novaclient_ext = "*"
rax_scheduled_images_python_novaclient_ext = "*"
[[package]]
category = "main"
description = "Novaclient Extension for Instance Default Network Flags"
name = "rax-default-network-flags-python-novaclient-ext"
optional = false
python-versions = "*"
version = "0.4.0"
[package.dependencies]
python-novaclient = "*"
[[package]]
category = "main"
description = "Extends python-novaclient to use RAX-SI, the Rackspace Nova API Scheduled Images extension"
name = "rax-scheduled-images-python-novaclient-ext"
optional = false
python-versions = "*"
version = "0.3.1"
[package.dependencies]
python-novaclient = "*"
[[package]]
category = "main"
description = "Python HTTP for Humans."
name = "requests"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "2.23.0"
[package.dependencies]
certifi = ">=2017.4.17"
chardet = ">=3.0.2,<4"
idna = ">=2.5,<3"
urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26"
[package.extras]
security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"]
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"]
[[package]]
category = "main"
description = "Validating URI References per RFC 3986"
name = "rfc3986"
optional = false
python-versions = "*"
version = "1.4.0"
[package.extras]
idna2008 = ["idna"]
[[package]]
category = "main"
description = "Python bindings to FreeDesktop.org Secret Service API"
marker = "sys_platform == \"linux\""
name = "secretstorage"
optional = false
python-versions = ">=3.5"
version = "3.1.2"
[package.dependencies]
cryptography = "*"
jeepney = ">=0.4.2"
[[package]]
category = "main"
description = "Simple, fast, extensible JSON encoder/decoder for Python"
name = "simplejson"
optional = false
python-versions = ">=2.5, !=3.0.*, !=3.1.*, !=3.2.*"
version = "3.17.0"
[[package]]
category = "main"
description = "Python 2 and 3 compatibility utilities"
name = "six"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
version = "1.14.0"
[[package]]
category = "main"
description = "Manage dynamic plugins for Python applications"
name = "stevedore"
optional = false
python-versions = "*"
version = "1.20.1"
[package.dependencies]
pbr = ">=1.8"
six = ">=1.9.0"
[[package]]
category = "main"
description = "HTTP library with thread-safe connection pooling, file post, and more."
name = "urllib3"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
version = "1.25.9"
[package.extras]
brotli = ["brotlipy (>=0.6.0)"]
secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "pyOpenSSL (>=0.14)", "ipaddress"]
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"]
[[package]]
category = "main"
description = "Module for decorators, wrappers and monkey patching."
name = "wrapt"
optional = false
python-versions = "*"
version = "1.12.1"
[metadata]
content-hash = "511fbbcba3231d762b9adbcd92ee995ca6a1d55aebb5f68d9897fd2265c5cc79"
python-versions = "^3.8"
[metadata.files]
argparse = [
{file = "argparse-1.4.0-py2.py3-none-any.whl", hash = "sha256:c31647edb69fd3d465a847ea3157d37bed1f95f19760b11a47aa91c04b666314"},
{file = "argparse-1.4.0.tar.gz", hash = "sha256:62b089a55be1d8949cd2bc7e0df0bddb9e028faefc8c32038cc84862aefdd6e4"},
]
babel = [
{file = "Babel-2.8.0-py2.py3-none-any.whl", hash = "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4"},
{file = "Babel-2.8.0.tar.gz", hash = "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38"},
]
certifi = [
{file = "certifi-2020.4.5.1-py2.py3-none-any.whl", hash = "sha256:1d987a998c75633c40847cc966fcf5904906c920a7f17ef374f5aa4282abd304"},
{file = "certifi-2020.4.5.1.tar.gz", hash = "sha256:51fcb31174be6e6664c5f69e3e1691a2d72a1a12e90f872cbdb1567eb47b6519"},
]
cffi = [
{file = "cffi-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1cae98a7054b5c9391eb3249b86e0e99ab1e02bb0cc0575da191aedadbdf4384"},
{file = "cffi-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:cf16e3cf6c0a5fdd9bc10c21687e19d29ad1fe863372b5543deaec1039581a30"},
{file = "cffi-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f2b0fa0c01d8a0c7483afd9f31d7ecf2d71760ca24499c8697aeb5ca37dc090c"},
{file = "cffi-1.14.0-cp27-cp27m-win32.whl", hash = "sha256:99f748a7e71ff382613b4e1acc0ac83bf7ad167fb3802e35e90d9763daba4d78"},
{file = "cffi-1.14.0-cp27-cp27m-win_amd64.whl", hash = "sha256:c420917b188a5582a56d8b93bdd8e0f6eca08c84ff623a4c16e809152cd35793"},
{file = "cffi-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:399aed636c7d3749bbed55bc907c3288cb43c65c4389964ad5ff849b6370603e"},
{file = "cffi-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:cab50b8c2250b46fe738c77dbd25ce017d5e6fb35d3407606e7a4180656a5a6a"},
{file = "cffi-1.14.0-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:001bf3242a1bb04d985d63e138230802c6c8d4db3668fb545fb5005ddf5bb5ff"},
{file = "cffi-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:e56c744aa6ff427a607763346e4170629caf7e48ead6921745986db3692f987f"},
{file = "cffi-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b8c78301cefcf5fd914aad35d3c04c2b21ce8629b5e4f4e45ae6812e461910fa"},
{file = "cffi-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:8c0ffc886aea5df6a1762d0019e9cb05f825d0eec1f520c51be9d198701daee5"},
{file = "cffi-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:8a6c688fefb4e1cd56feb6c511984a6c4f7ec7d2a1ff31a10254f3c817054ae4"},
{file = "cffi-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:95cd16d3dee553f882540c1ffe331d085c9e629499ceadfbda4d4fde635f4b7d"},
{file = "cffi-1.14.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:66e41db66b47d0d8672d8ed2708ba91b2f2524ece3dee48b5dfb36be8c2f21dc"},
{file = "cffi-1.14.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:028a579fc9aed3af38f4892bdcc7390508adabc30c6af4a6e4f611b0c680e6ac"},
{file = "cffi-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:cef128cb4d5e0b3493f058f10ce32365972c554572ff821e175dbc6f8ff6924f"},
{file = "cffi-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:337d448e5a725bba2d8293c48d9353fc68d0e9e4088d62a9571def317797522b"},
{file = "cffi-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e577934fc5f8779c554639376beeaa5657d54349096ef24abe8c74c5d9c117c3"},
{file = "cffi-1.14.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:62ae9af2d069ea2698bf536dcfe1e4eed9090211dbaafeeedf5cb6c41b352f66"},
{file = "cffi-1.14.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:14491a910663bf9f13ddf2bc8f60562d6bc5315c1f09c704937ef17293fb85b0"},
{file = "cffi-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:c43866529f2f06fe0edc6246eb4faa34f03fe88b64a0a9a942561c8e22f4b71f"},
{file = "cffi-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2089ed025da3919d2e75a4d963d008330c96751127dd6f73c8dc0c65041b4c26"},
{file = "cffi-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3b911c2dbd4f423b4c4fcca138cadde747abdb20d196c4a48708b8a2d32b16dd"},
{file = "cffi-1.14.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:7e63cbcf2429a8dbfe48dcc2322d5f2220b77b2e17b7ba023d6166d84655da55"},
{file = "cffi-1.14.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3d311bcc4a41408cf5854f06ef2c5cab88f9fded37a3b95936c9879c1640d4c2"},
{file = "cffi-1.14.0-cp38-cp38-win32.whl", hash = "sha256:675686925a9fb403edba0114db74e741d8181683dcf216be697d208857e04ca8"},
{file = "cffi-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:00789914be39dffba161cfc5be31b55775de5ba2235fe49aa28c148236c4e06b"},
{file = "cffi-1.14.0.tar.gz", hash = "sha256:2d384f4a127a15ba701207f7639d94106693b6cd64173d6c8988e2c25f3ac2b6"},
]
chardet = [
{file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"},
{file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"},
]
cryptography = [
{file = "cryptography-2.9-cp27-cp27m-macosx_10_9_intel.whl", hash = "sha256:ef9a55013676907df6c9d7dd943eb1770d014f68beaa7e73250fb43c759f4585"},
{file = "cryptography-2.9-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2a2ad24d43398d89f92209289f15265107928f22a8d10385f70def7a698d6a02"},
{file = "cryptography-2.9-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:95e1296e0157361fe2f5f0ed307fd31f94b0ca13372e3673fa95095a627636a1"},
{file = "cryptography-2.9-cp27-cp27m-win32.whl", hash = "sha256:192ca04a36852a994ef21df13cca4d822adbbdc9d5009c0f96f1d2929e375d4f"},
{file = "cryptography-2.9-cp27-cp27m-win_amd64.whl", hash = "sha256:ed1d0760c7e46436ec90834d6f10477ff09475c692ed1695329d324b2c5cd547"},
{file = "cryptography-2.9-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:19ae795137682a9778892fb4390c07811828b173741bce91e30f899424b3934d"},
{file = "cryptography-2.9-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d1bf5a1a0d60c7f9a78e448adcb99aa101f3f9588b16708044638881be15d6bc"},
{file = "cryptography-2.9-cp35-abi3-macosx_10_9_intel.whl", hash = "sha256:1b9b535d6b55936a79dbe4990b64bb16048f48747c76c29713fea8c50eca2acf"},
{file = "cryptography-2.9-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:7a279f33a081d436e90e91d1a7c338553c04e464de1c9302311a5e7e4b746088"},
{file = "cryptography-2.9-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:49870684da168b90110bbaf86140d4681032c5e6a2461adc7afdd93be5634216"},
{file = "cryptography-2.9-cp35-cp35m-win32.whl", hash = "sha256:6b91cab3841b4c7cb70e4db1697c69f036c8bc0a253edc0baa6783154f1301e4"},
{file = "cryptography-2.9-cp35-cp35m-win_amd64.whl", hash = "sha256:587f98ce27ac4547177a0c6fe0986b8736058daffe9160dcf5f1bd411b7fbaa1"},
{file = "cryptography-2.9-cp36-cp36m-win32.whl", hash = "sha256:cc20316e3f5a6b582fc3b029d8dc03aabeb645acfcb7fc1d9848841a33265748"},
{file = "cryptography-2.9-cp36-cp36m-win_amd64.whl", hash = "sha256:3be7a5722d5bfe69894d3f7bbed15547b17619f3a88a318aab2e37f457524164"},
{file = "cryptography-2.9-cp37-cp37m-win32.whl", hash = "sha256:7598974f6879a338c785c513e7c5a4329fbc58b9f6b9a6305035fca5b1076552"},
{file = "cryptography-2.9-cp37-cp37m-win_amd64.whl", hash = "sha256:5aca6f00b2f42546b9bdf11a69f248d1881212ce5b9e2618b04935b87f6f82a1"},
{file = "cryptography-2.9-cp38-cp38-win32.whl", hash = "sha256:9fc9da390e98cb6975eadf251b6e5fa088820141061bf041cd5c72deba1dc526"},
{file = "cryptography-2.9-cp38-cp38-win_amd64.whl", hash = "sha256:6b744039b55988519cc183149cceb573189b3e46e16ccf6f8c46798bb767c9dc"},
{file = "cryptography-2.9.tar.gz", hash = "sha256:0cacd3ef5c604b8e5f59bf2582c076c98a37fe206b31430d0cd08138aff0986e"},
]
debtcollector = [
{file = "debtcollector-1.11.0-py2.py3-none-any.whl", hash = "sha256:a339dd5c5d0516c9d42ff764d41565d5dcc408c9afcaac6f5d277a768f01d2a5"},
{file = "debtcollector-1.11.0.tar.gz", hash = "sha256:733afa881c844a40ef4623ab73ce1862e505bc4655635da3a91d8f3482677785"},
]
idna = [
{file = "idna-2.9-py2.py3-none-any.whl", hash = "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"},
{file = "idna-2.9.tar.gz", hash = "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb"},
]
ip-associations-python-novaclient-ext = [
{file = "ip_associations_python_novaclient_ext-0.2.tar.gz", hash = "sha256:e4576c3ee149bcca7e034507ad9c698cb07dd9fa10f90056756aea0fa59bae37"},
]
iso8601 = [
{file = "iso8601-0.1.12-py2.py3-none-any.whl", hash = "sha256:210e0134677cc0d02f6028087fee1df1e1d76d372ee1db0bf30bf66c5c1c89a3"},
{file = "iso8601-0.1.12-py3-none-any.whl", hash = "sha256:bbbae5fb4a7abfe71d4688fd64bff70b91bbd74ef6a99d964bab18f7fdf286dd"},
{file = "iso8601-0.1.12.tar.gz", hash = "sha256:49c4b20e1f38aa5cf109ddcd39647ac419f928512c869dc01d5c7098eddede82"},
]
jeepney = [
{file = "jeepney-0.4.3-py3-none-any.whl", hash = "sha256:d6c6b49683446d2407d2fe3acb7a368a77ff063f9182fe427da15d622adc24cf"},
{file = "jeepney-0.4.3.tar.gz", hash = "sha256:3479b861cc2b6407de5188695fa1a8d57e5072d7059322469b62628869b8e36e"},
]
keyring = [
{file = "keyring-21.2.0-py3-none-any.whl", hash = "sha256:8179b1cdcdcbc221456b5b74e6b7cfa06f8dd9f239eb81892166d9223d82c5ba"},
{file = "keyring-21.2.0.tar.gz", hash = "sha256:197fd5903901030ef7b82fe247f43cfed2c157a28e7747d1cfcf4bc5e699dd03"},
]
keystoneauth1 = [
{file = "keystoneauth1-2.18.0-py2.py3-none-any.whl", hash = "sha256:ad292a0f78fb88052fd91ab5d59297c24926994f916d0d261bf131800a925e8d"},
{file = "keystoneauth1-2.18.0.tar.gz", hash = "sha256:075a9ca7a8877c5885fa2487699015e45260c4e6be119683effe0ad2ab1255d2"},
]
mock = [
{file = "mock-4.0.2-py3-none-any.whl", hash = "sha256:3f9b2c0196c60d21838f307f5825a7b86b678cedc58ab9e50a8988187b4d81e0"},
{file = "mock-4.0.2.tar.gz", hash = "sha256:dd33eb70232b6118298d516bbcecd26704689c386594f0f3c4f13867b2c56f72"},
]
monotonic = [
{file = "monotonic-1.5-py2.py3-none-any.whl", hash = "sha256:552a91f381532e33cbd07c6a2655a21908088962bb8fa7239ecbcc6ad1140cc7"},
{file = "monotonic-1.5.tar.gz", hash = "sha256:23953d55076df038541e648a53676fb24980f7a1be290cdda21300b3bc21dfb0"},
]
msgpack-python = [
{file = "msgpack-python-0.5.6.tar.gz", hash = "sha256:378cc8a6d3545b532dfd149da715abae4fda2a3adb6d74e525d0d5e51f46909b"},
]
netaddr = [
{file = "netaddr-0.7.19-py2.py3-none-any.whl", hash = "sha256:56b3558bd71f3f6999e4c52e349f38660e54a7a8a9943335f73dfc96883e08ca"},
{file = "netaddr-0.7.19.tar.gz", hash = "sha256:38aeec7cdd035081d3a4c306394b19d677623bf76fa0913f6695127c7753aefd"},
]
netifaces = [
{file = "netifaces-0.10.9-cp27-cp27m-macosx_10_13_x86_64.whl", hash = "sha256:b2ff3a0a4f991d2da5376efd3365064a43909877e9fabfa801df970771161d29"},
{file = "netifaces-0.10.9-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:0c4304c6d5b33fbd9b20fdc369f3a2fef1a8bbacfb6fd05b9708db01333e9e7b"},
{file = "netifaces-0.10.9-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:7a25a8e28281504f0e23e181d7a9ed699c72f061ca6bdfcd96c423c2a89e75fc"},
{file = "netifaces-0.10.9-cp27-cp27m-win32.whl", hash = "sha256:6d84e50ec28e5d766c9911dce945412dc5b1ce760757c224c71e1a9759fa80c2"},
{file = "netifaces-0.10.9-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f911b7f0083d445c8d24cfa5b42ad4996e33250400492080f5018a28c026db2b"},
{file = "netifaces-0.10.9-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:4921ed406386246b84465950d15a4f63480c1458b0979c272364054b29d73084"},
{file = "netifaces-0.10.9-cp33-cp33m-manylinux1_i686.whl", hash = "sha256:5b3167f923f67924b356c1338eb9ba275b2ba8d64c7c2c47cf5b5db49d574994"},
{file = "netifaces-0.10.9-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:db881478f1170c6dd524175ba1c83b99d3a6f992a35eca756de0ddc4690a1940"},
{file = "netifaces-0.10.9-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:f0427755c68571df37dc58835e53a4307884a48dec76f3c01e33eb0d4a3a81d7"},
{file = "netifaces-0.10.9-cp34-cp34m-win32.whl", hash = "sha256:7cc6fd1eca65be588f001005446a47981cbe0b2909f5be8feafef3bf351a4e24"},
{file = "netifaces-0.10.9-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:b47e8f9ff6846756be3dc3fb242ca8e86752cd35a08e06d54ffc2e2a2aca70ea"},
{file = "netifaces-0.10.9-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f8885cc48c8c7ad51f36c175e462840f163cb4687eeb6c6d7dfaf7197308e36b"},
{file = "netifaces-0.10.9-cp35-cp35m-win32.whl", hash = "sha256:755050799b5d5aedb1396046f270abfc4befca9ccba3074f3dbbb3cb34f13aae"},
{file = "netifaces-0.10.9-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:ad10acab2ef691eb29a1cc52c3be5ad1423700e993cc035066049fa72999d0dc"},
{file = "netifaces-0.10.9-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:563a1a366ee0fb3d96caab79b7ac7abd2c0a0577b157cc5a40301373a0501f89"},
{file = "netifaces-0.10.9-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:30ed89ab8aff715caf9a9d827aa69cd02ad9f6b1896fd3fb4beb998466ed9a3c"},
{file = "netifaces-0.10.9-cp36-cp36m-win32.whl", hash = "sha256:75d3a4ec5035db7478520ac547f7c176e9fd438269e795819b67223c486e5cbe"},
{file = "netifaces-0.10.9-cp36-cp36m-win_amd64.whl", hash = "sha256:078986caf4d6a602a4257d3686afe4544ea74362b8928e9f4389b5cd262bc215"},
{file = "netifaces-0.10.9-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:3095218b66d359092b82f07c5422293c2f6559cf8d36b96b379cc4cdc26eeffa"},
{file = "netifaces-0.10.9-cp37-cp37m-win32.whl", hash = "sha256:da298241d87bcf468aa0f0705ba14572ad296f24c4fda5055d6988701d6fd8e1"},
{file = "netifaces-0.10.9-cp37-cp37m-win_amd64.whl", hash = "sha256:86b8a140e891bb23c8b9cb1804f1475eb13eea3dbbebef01fcbbf10fbafbee42"},
{file = "netifaces-0.10.9.tar.gz", hash = "sha256:2dee9ffdd16292878336a58d04a20f0ffe95555465fee7c9bd23b3490ef2abf3"},
]
os-diskconfig-python-novaclient-ext = [
{file = "os_diskconfig_python_novaclient_ext-0.1.3-py2-none-any.whl", hash = "sha256:f668665a5765648ec47fbd80f9a8e5f37498b6ea3fb2d0d570b7da7d96146be9"},
{file = "os_diskconfig_python_novaclient_ext-0.1.3.tar.gz", hash = "sha256:e7d19233a7b73c70244d2527d162d8176555698e7c621b41f689be496df15e75"},
]
os-networksv2-python-novaclient-ext = [
{file = "os_networksv2_python_novaclient_ext-0.26.tar.gz", hash = "sha256:613a75216d98d3ce6bb413f717323e622386c24fc9cc66148507539e7dc5bf19"},
]
os-virtual-interfacesv2-python-novaclient-ext = [
{file = "os_virtual_interfacesv2_python_novaclient_ext-0.20.tar.gz", hash = "sha256:6d39ff4174496a0f795d11f20240805a16bbf452091cf8eb9bd1d5ae2fca449d"},
]
"oslo.config" = [
{file = "oslo.config-4.12.0-py2.py3-none-any.whl", hash = "sha256:8e5c30d0982ed3adb179374405318909f088cbb66baca80879932d53db6a4691"},
{file = "oslo.config-4.12.0.tar.gz", hash = "sha256:bd8d03c4b28f1aa115e6b094651fc51adbca686f22f45ed721d837a5a5a249dd"},
]
"oslo.i18n" = [
{file = "oslo.i18n-3.12.0-py2.py3-none-any.whl", hash = "sha256:b01f56d99347bfef6681a0e23b3394e8fc1cf2102b5d85504b898b22273cd0af"},
{file = "oslo.i18n-3.12.0.tar.gz", hash = "sha256:6add28cbbe8254838f7f131de0cf0f3761786d57e5fe5716a488260b725f58d3"},
]
"oslo.serialization" = [
{file = "oslo.serialization-2.16.1-py2.py3-none-any.whl", hash = "sha256:f68d1f2c2a7af50ce2b68845400c5a7b4ea9c46eca34eaeb63513c0c49524ad0"},
{file = "oslo.serialization-2.16.1.tar.gz", hash = "sha256:306d9982eae272fff05db7637971fd07d2b9b818306c9e3af87aea7f452b4844"},
]
"oslo.utils" = [
{file = "oslo.utils-3.22.3-py2.py3-none-any.whl", hash = "sha256:104f0804304a226721c42c1d34fd2bc12e3a7d790fbd0eb0ce8b0ec5594b2e6e"},
{file = "oslo.utils-3.22.3.tar.gz", hash = "sha256:70473be975412407d43ef04b0de34c4d21c567bdcab608caeb8f0fcd4138f4f2"},
]
pbr = [
{file = "pbr-1.10.0-py2.py3-none-any.whl", hash = "sha256:f5cf7265a80636ecff66806d13494cbf9d77a3758a65fd8b4d4d4bee81b0c375"},
{file = "pbr-1.10.0.tar.gz", hash = "sha256:186428c270309e6fdfe2d5ab0949ab21ae5f7dea831eab96701b86bd666af39c"},
]
positional = [
{file = "positional-1.2.1.tar.gz", hash = "sha256:cf48ea169f6c39486d5efa0ce7126a97bed979a52af6261cf255a41f9a74453a"},
]
prettytable = [
{file = "prettytable-0.7.2.tar.bz2", hash = "sha256:853c116513625c738dc3ce1aee148b5b5757a86727e67eff6502c7ca59d43c36"},
{file = "prettytable-0.7.2.tar.gz", hash = "sha256:2d5460dc9db74a32bcc8f9f67de68b2c4f4d2f01fa3bd518764c69156d9cacd9"},
{file = "prettytable-0.7.2.zip", hash = "sha256:a53da3b43d7a5c229b5e3ca2892ef982c46b7923b51e98f0db49956531211c4f"},
]
pycparser = [
{file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
{file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
]
pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
{file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
]
pyrax = [
{file = "pyrax-1.9.8-py2.py3-none-any.whl", hash = "sha256:23873829b286183b56fdb94b515118e3332bfcb12b7532dc0582e78bd002c0ae"},
{file = "pyrax-1.9.8.tar.gz", hash = "sha256:e9db943447fdf2690046d7f98466fc4743497b74578efe6e400a6edbfd9728f5"},
]
python-keystoneclient = [
{file = "python-keystoneclient-3.10.0.tar.gz", hash = "sha256:c65fa56791ec02dc942ad08e5c3634b8dca98eda76ee3c2549018b6767e67918"},
{file = "python_keystoneclient-3.10.0-py2.py3-none-any.whl", hash = "sha256:f30dd06d03f1f85af0cfa18c270e23d2ffd9e776c11c1b534f6ea503e4f31d80"},
]
python-novaclient = [
{file = "python-novaclient-2.27.0.tar.gz", hash = "sha256:d1279d5c2857cf8c56cb953639b36225bc1fec7fa30ee632940823506a7638ef"},
{file = "python_novaclient-2.27.0-py2.py3-none-any.whl", hash = "sha256:6406a8ced973d6e73115fde9fa4c09e01046415701afd98aaf6f0295ba0bad86"},
]
pytz = [
{file = "pytz-2019.3-py2.py3-none-any.whl", hash = "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d"},
{file = "pytz-2019.3.tar.gz", hash = "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"},
]
pywin32-ctypes = [
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
{file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"},
]
pyyaml = [
{file = "PyYAML-5.3.1-cp27-cp27m-win32.whl", hash = "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f"},
{file = "PyYAML-5.3.1-cp27-cp27m-win_amd64.whl", hash = "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76"},
{file = "PyYAML-5.3.1-cp35-cp35m-win32.whl", hash = "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2"},
{file = "PyYAML-5.3.1-cp35-cp35m-win_amd64.whl", hash = "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c"},
{file = "PyYAML-5.3.1-cp36-cp36m-win32.whl", hash = "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2"},
{file = "PyYAML-5.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648"},
{file = "PyYAML-5.3.1-cp37-cp37m-win32.whl", hash = "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a"},
{file = "PyYAML-5.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf"},
{file = "PyYAML-5.3.1-cp38-cp38-win32.whl", hash = "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97"},
{file = "PyYAML-5.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee"},
{file = "PyYAML-5.3.1.tar.gz", hash = "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d"},
]
rackspace-auth-openstack = [
{file = "rackspace-auth-openstack-1.3.tar.gz", hash = "sha256:c4c069eeb1924ea492c50144d8a4f5f1eb0ece945e0c0d60157cabcadff651cd"},
]
rackspace-novaclient = [
{file = "rackspace-novaclient-2.1.tar.gz", hash = "sha256:22fc44f623bae0feb32986ec4630abee904e4c96fba5849386a87e88c450eae7"},
]
rax-default-network-flags-python-novaclient-ext = [
{file = "rax_default_network_flags_python_novaclient_ext-0.4.0.tar.gz", hash = "sha256:852bf49d90e7a1bc16aa0b25b46a45ba5654069f7321a363c8d94c5496666001"},
]
rax-scheduled-images-python-novaclient-ext = [
{file = "rax_scheduled_images_python_novaclient_ext-0.3.1.tar.gz", hash = "sha256:f170cf97b20bdc8a1784cc0b85b70df5eb9b88c3230dab8e68e1863bf3937cdb"},
]
requests = [
{file = "requests-2.23.0-py2.py3-none-any.whl", hash = "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee"},
{file = "requests-2.23.0.tar.gz", hash = "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"},
]
rfc3986 = [
{file = "rfc3986-1.4.0-py2.py3-none-any.whl", hash = "sha256:af9147e9aceda37c91a05f4deb128d4b4b49d6b199775fd2d2927768abdc8f50"},
{file = "rfc3986-1.4.0.tar.gz", hash = "sha256:112398da31a3344dc25dbf477d8df6cb34f9278a94fee2625d89e4514be8bb9d"},
]
secretstorage = [
{file = "SecretStorage-3.1.2-py3-none-any.whl", hash = "sha256:b5ec909dde94d4ae2fa26af7c089036997030f0cf0a5cb372b4cccabd81c143b"},
{file = "SecretStorage-3.1.2.tar.gz", hash = "sha256:15da8a989b65498e29be338b3b279965f1b8f09b9668bd8010da183024c8bff6"},
]
simplejson = [
{file = "simplejson-3.17.0-cp27-cp27m-macosx_10_13_x86_64.whl", hash = "sha256:87d349517b572964350cc1adc5a31b493bbcee284505e81637d0174b2758ba17"},
{file = "simplejson-3.17.0-cp27-cp27m-win32.whl", hash = "sha256:1d1e929cdd15151f3c0b2efe953b3281b2fd5ad5f234f77aca725f28486466f6"},
{file = "simplejson-3.17.0-cp27-cp27m-win_amd64.whl", hash = "sha256:1ea59f570b9d4916ae5540a9181f9c978e16863383738b69a70363bc5e63c4cb"},
{file = "simplejson-3.17.0-cp33-cp33m-win32.whl", hash = "sha256:8027bd5f1e633eb61b8239994e6fc3aba0346e76294beac22a892eb8faa92ba1"},
{file = "simplejson-3.17.0-cp33-cp33m-win_amd64.whl", hash = "sha256:22a7acb81968a7c64eba7526af2cf566e7e2ded1cb5c83f0906b17ff1540f866"},
{file = "simplejson-3.17.0-cp34-cp34m-win32.whl", hash = "sha256:17163e643dbf125bb552de17c826b0161c68c970335d270e174363d19e7ea882"},
{file = "simplejson-3.17.0-cp34-cp34m-win_amd64.whl", hash = "sha256:0fe3994207485efb63d8f10a833ff31236ed27e3b23dadd0bf51c9900313f8f2"},
{file = "simplejson-3.17.0-cp35-cp35m-win32.whl", hash = "sha256:4cf91aab51b02b3327c9d51897960c554f00891f9b31abd8a2f50fd4a0071ce8"},
{file = "simplejson-3.17.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fc9051d249dd5512e541f20330a74592f7a65b2d62e18122ca89bf71f94db748"},
{file = "simplejson-3.17.0-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:86afc5b5cbd42d706efd33f280fec7bd7e2772ef54e3f34cf6b30777cd19a614"},
{file = "simplejson-3.17.0-cp36-cp36m-win32.whl", hash = "sha256:926bcbef9eb60e798eabda9cd0bbcb0fca70d2779aa0aa56845749d973eb7ad5"},
{file = "simplejson-3.17.0-cp36-cp36m-win_amd64.whl", hash = "sha256:daaf4d11db982791be74b23ff4729af2c7da79316de0bebf880fa2d60bcc8c5a"},
{file = "simplejson-3.17.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:9a126c3a91df5b1403e965ba63b304a50b53d8efc908a8c71545ed72535374a3"},
{file = "simplejson-3.17.0-cp37-cp37m-win32.whl", hash = "sha256:fc046afda0ed8f5295212068266c92991ab1f4a50c6a7144b69364bdee4a0159"},
{file = "simplejson-3.17.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7cce4bac7e0d66f3a080b80212c2238e063211fe327f98d764c6acbc214497fc"},
{file = "simplejson-3.17.0.tar.gz", hash = "sha256:2b4b2b738b3b99819a17feaf118265d0753d5536049ea570b3c43b51c4701e81"},
{file = "simplejson-3.17.0.win-amd64-py2.7.exe", hash = "sha256:1d346c2c1d7dd79c118f0cc7ec5a1c4127e0c8ffc83e7b13fc5709ff78c9bb84"},
{file = "simplejson-3.17.0.win-amd64-py3.3.exe", hash = "sha256:5cfd495527f8b85ce21db806567de52d98f5078a8e9427b18e251c68bd573a26"},
{file = "simplejson-3.17.0.win-amd64-py3.4.exe", hash = "sha256:8de378d589eccbc75941e480b4d5b4db66f22e4232f87543b136b1f093fff342"},
{file = "simplejson-3.17.0.win-amd64-py3.5.exe", hash = "sha256:f4b64a1031acf33e281fd9052336d6dad4d35eee3404c95431c8c6bc7a9c0588"},
{file = "simplejson-3.17.0.win-amd64-py3.6.exe", hash = "sha256:ad8dd3454d0c65c0f92945ac86f7b9efb67fa2040ba1b0189540e984df904378"},
{file = "simplejson-3.17.0.win-amd64-py3.7.exe", hash = "sha256:229edb079d5dd81bf12da952d4d825bd68d1241381b37d3acf961b384c9934de"},
{file = "simplejson-3.17.0.win32-py2.7.exe", hash = "sha256:4fd5f79590694ebff8dc980708e1c182d41ce1fda599a12189f0ca96bf41ad70"},
{file = "simplejson-3.17.0.win32-py3.3.exe", hash = "sha256:d140e9376e7f73c1f9e0a8e3836caf5eec57bbafd99259d56979da05a6356388"},
{file = "simplejson-3.17.0.win32-py3.4.exe", hash = "sha256:da00675e5e483ead345429d4f1374ab8b949fba4429d60e71ee9d030ced64037"},
{file = "simplejson-3.17.0.win32-py3.5.exe", hash = "sha256:7739940d68b200877a15a5ff5149e1599737d6dd55e302625650629350466418"},
{file = "simplejson-3.17.0.win32-py3.6.exe", hash = "sha256:60aad424e47c5803276e332b2a861ed7a0d46560e8af53790c4c4fb3420c26c2"},
{file = "simplejson-3.17.0.win32-py3.7.exe", hash = "sha256:1fbba86098bbfc1f85c5b69dc9a6d009055104354e0d9880bb00b692e30e0078"},
]
six = [
{file = "six-1.14.0-py2.py3-none-any.whl", hash = "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"},
{file = "six-1.14.0.tar.gz", hash = "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a"},
]
stevedore = [
{file = "stevedore-1.20.1-py2.py3-none-any.whl", hash = "sha256:edc26850d33770ce0b961b10b4a20c0b366bf89e316bbc9fa200dfd7ca2b5e57"},
{file = "stevedore-1.20.1.tar.gz", hash = "sha256:046200a915780b58bf1c84436e86701b741d664893aefa84d8aceadd15ed4734"},
]
urllib3 = [
{file = "urllib3-1.25.9-py2.py3-none-any.whl", hash = "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115"},
{file = "urllib3-1.25.9.tar.gz", hash = "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527"},
]
wrapt = [
{file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"},
]
$ virtualenv venv --python python3.7 venv
$ source venv/bin/activate
$ cat requirements-new.txt
hacking>=1.1.0,<1.2.0 # Apache-2.0
pycodestyle>=2.0.0 # MIT License
$ pip install -r requirements-new.txt
Collecting hacking<1.2.0,>=1.1.0
Using cached https://files.pythonhosted.org/packages/71/05/ae66ec5a58e5c973ea09adcd4eac1a63e370579b768a2fd875172b8cc82e/hacking-1.1.0-py2.py3-none-any.whl
Collecting pycodestyle>=2.0.0
Using cached https://files.pythonhosted.org/packages/0e/0c/04a353e104d2f324f8ee5f4b32012618c1c86dd79e52a433b64fceed511b/pycodestyle-2.5.0-py2.py3-none-any.whl
Collecting six>=1.10.0
Using cached https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl
Collecting flake8<2.7.0,>=2.6.0
Using cached https://files.pythonhosted.org/packages/70/a9/9b66f22d038de51e05f92d5e677fd89d8f9c980db0b8a130621baad052f5/flake8-2.6.2-py2.py3-none-any.whl
Collecting pbr!=2.1.0,>=2.0.0
Using cached https://files.pythonhosted.org/packages/46/a4/d5c83831a3452713e4b4f126149bc4fbda170f7cb16a86a00ce57ce0e9ad/pbr-5.4.3-py2.py3-none-any.whl
Collecting mccabe<0.6,>=0.2.1
Using cached https://files.pythonhosted.org/packages/69/be/9c322ed286263a93e5ee0ff575662d0709fc73ee906522e7cfa72b08b946/mccabe-0.5.3-py2.py3-none-any.whl
Collecting pyflakes!=1.2.0,!=1.2.1,!=1.2.2,<1.3,>=0.8.1
Using cached https://files.pythonhosted.org/packages/74/55/98f59358be6d7240ba546b8a74813cc21841a9145a0c1a3a7998f50acbe7/pyflakes-1.2.3-py2.py3-none-any.whl
ERROR: flake8 2.6.2 has requirement pycodestyle<2.1,>=2.0, but you'll have pycodestyle 2.5.0 which is incompatible.
Installing collected packages: six, pycodestyle, mccabe, pyflakes, flake8, pbr, hacking
Successfully installed flake8-2.6.2 hacking-1.1.0 mccabe-0.5.3 pbr-5.4.3 pycodestyle-2.5.0 pyflakes-1.2.3 six-1.12.0
It's doing Unit Propagation, Basic Backtracking and maintaining something like the "conflict graph".
Look into it in more detail.
I was testing --unstable-feature=resolver
in the new pip 20.1b1 (thanks ❤️) and found pip._vendor.resolvelib.resolvers.ResolutionTooDeep: 100
in the middle of the collection step. The requirements.txt
file is 164 lines long, but all the versions are pinned (it's an output of pip-tools) so I guess the solver shouldn't do any real work.
In fact, testing in an environment that already has all those dependencies, pip correctly checks that they are all already satisfied and right after checking the last one, it fails:
$ tail requirements.txt
traittypes==0.2.1 # via ipyleaflet
urllib3==1.25.7 # via requests
vine==1.2.0 # via -r requirements.in, amqp
wcwidth==0.1.8 # via prompt-toolkit
webencodings==0.5.1 # via bleach
widgetsnbextension==3.5.1 # via ipywidgets
xarray==0.14.1 # via ipyleaflet
# The following packages are considered to be unsafe in a requirements file:
# setuptools
$ pip install --no-cache-dir -r requirements.txt --no-cache --unstable-feature=resolver
[...]
Requirement already satisfied: urllib3==1.25.7 in /home/juanlu/.pyenv/versions/3.8.2/envs/bw38/lib/python3.8/site-packages (from -r requirements.txt (line 156)) (1.25.7)
Requirement already satisfied: vine==1.2.0 in /home/juanlu/.pyenv/versions/3.8.2/envs/bw38/lib/python3.8/site-packages (from -r requirements.txt (line 157)) (1.2.0)
Requirement already satisfied: wcwidth==0.1.8 in /home/juanlu/.pyenv/versions/3.8.2/envs/bw38/lib/python3.8/site-packages (from -r requirements.txt (line 158)) (0.1.8)
Requirement already satisfied: webencodings==0.5.1 in /home/juanlu/.pyenv/versions/3.8.2/envs/bw38/lib/python3.8/site-packages (from -r requirements.txt (line 159)) (0.5.1)
Requirement already satisfied: widgetsnbextension==3.5.1 in /home/juanlu/.pyenv/versions/3.8.2/envs/bw38/lib/python3.8/site-packages (from -r requirements.txt (line 160)) (3.5.1)
Requirement already satisfied: xarray==0.14.1 in /home/juanlu/.pyenv/versions/3.8.2/envs/bw38/lib/python3.8/site-packages (from -r requirements.txt (line 161)) (0.14.1)
Requirement already satisfied: setuptools==46.1.3 in /home/juanlu/.pyenv/versions/3.8.2/envs/bw38/lib/python3.8/site-packages (from ipython==7.11.1->-r requirements.txt (line 79)) (46.1.3)
ERROR: Exception:
Traceback (most recent call last):
File "/home/juanlu/.pyenv/versions/bw38/lib/python3.8/site-packages/pip/_internal/cli/base_command.py", line 188, in _main
status = self.run(options, args)
File "/home/juanlu/.pyenv/versions/bw38/lib/python3.8/site-packages/pip/_internal/cli/req_command.py", line 185, in wrapper
return func(self, options, args)
File "/home/juanlu/.pyenv/versions/bw38/lib/python3.8/site-packages/pip/_internal/commands/install.py", line 332, in run
requirement_set = resolver.resolve(
File "/home/juanlu/.pyenv/versions/bw38/lib/python3.8/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 80, in resolve
self._result = resolver.resolve(requirements)
File "/home/juanlu/.pyenv/versions/bw38/lib/python3.8/site-packages/pip/_vendor/resolvelib/resolvers.py", line 413, in resolve
state = resolution.resolve(requirements, max_rounds=max_rounds)
File "/home/juanlu/.pyenv/versions/bw38/lib/python3.8/site-packages/pip/_vendor/resolvelib/resolvers.py", line 323, in resolve
raise ResolutionTooDeep(max_rounds)
pip._vendor.resolvelib.resolvers.ResolutionTooDeep: 100
I am working on a reproducer I can disclose safely.
Following the suggestion in pypa/pip#988 (comment) I am submitting this test case here.
Instead of just repeating myself, the issue is pypa/pip#4625
Not sure if that is in scope with the new dependency resolver, but mentioning it and let you think about it for a moment can't hurt.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.