Pipenv: Pipenv locks package to a post-release version without all platform support.

Created on 22 Jul 2019  ·  15Comments  ·  Source: pypa/pipenv

Issue description

At this time, docutils package on PyPI has different versions for Python 2 (0.15.post1) and for Python 3 (0.15).

docutils

When I try to install this package using Pipenv with Python 3, dependencies will lock successfully, however they will contain py2-specific version 0.15.post1, which then fails to install. (Manually forcing version docutils==0.15 works, and pip install docutils installs the correct version).

Expected result

In a new folder, run pipenv install --three docutils. Pipenv creates a new virtualenv and installs docutils.

Actual result

Package installation fails:

% rm -r ~/.cache/pipenv
% pipenv install --verbose --three docutils
Creating a virtualenv for this project…
Pipfile: /home/adam/tmp/reproducer/Pipfile
Using /usr/bin/python3 (3.7.3) to create virtualenv…
⠧ Creating virtual environment...Using base prefix '/usr'
New python executable in /home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/bin/python3
Also creating executable in /home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/bin/python
Installing setuptools, pip, wheel...
done.
Running virtualenv with interpreter /usr/bin/python3

✔ Successfully created virtual environment! 
Virtualenv location: /home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl
Creating a Pipfile for this project…
Installing docutils…
⠋ Installing...Installing 'docutils'
$ ['/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/bin/pip', 'install', '--verbose', '--upgrade', 'docutils', '-i', 'https://pypi.org/simple']
Adding docutils to Pipfile's [packages]…
✔ Installation Succeeded 
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✔ Success! 
Using pip: -i https://pypi.org/simple
Using pip: -i https://pypi.org/simple
Using pip: -i https://pypi.org/simple

                          ROUND 1                           
Current constraints:
  docutils

Finding the best candidates:
  found candidate docutils==0.15.post1 (constraint was <any>)

Finding secondary dependencies:
  docutils==0.15.post1      requires -
------------------------------------------------------------
Result of round 1: stable, done


Updated Pipfile.lock (c8fbe9)!
Installing dependencies from Pipfile.lock (c8fbe9)…
Installing 'docutils'▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/1 — 00:00:00
$ ['/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/bin/pip', 'install', '--verbose', '--upgrade', '--no-deps', '-r', '/tmp/pipenv-7ry13eyx-requirements/pipenv-_7eioysf-requirement.txt', '-i', 'https://pypi.org/simple', '--require-hashes']
Created temporary directory: /tmp/pip-ephem-wheel-cache-l_vczto7
Created temporary directory: /tmp/pip-req-tracker-_bavf9s6
Created requirements tracker '/tmp/pip-req-tracker-_bavf9s6'
Created temporary directory: /tmp/pip-install-pqe6tgxy
Collecting docutils==0.15.post1 (from -r /tmp/pipenv-7ry13eyx-requirements/pipenv-_7eioysf-requirement.txt (line 1))
  1 location(s) to search for versions of docutils:
  * https://pypi.org/simple/docutils/
  Getting page https://pypi.org/simple/docutils/
  Looking up "https://pypi.org/simple/docutils/" in the cache
  Request header has "max_age" as 0, cache bypassed
  Starting new HTTPS connection (1): pypi.org:443
  https://pypi.org:443 "GET /simple/docutils/ HTTP/1.1" 304 0
  Analyzing links from page https://pypi.org/simple/docutils/
    Found link https://files.pythonhosted.org/packages/3e/a3/381d27fae58a59915440374367712bf2442c3feda26d021263041b3809ba/docutils-0.3.tar.gz#sha256=13d4efb5c105a3440cfc2e4124a455016e9e117e2afda6bf3583142215dca988 (from https://pypi.org/simple/docutils/), version: 0.3
    Found link https://files.pythonhosted.org/packages/b2/ff/5040ee72b3ec93fdeb6fec6c712f684d6811bebf87c413c651c47ab10580/docutils-0.3.5.tar.gz#sha256=45c53691e6ba7e96f60dfa6f93c012749d7d8068489419ef608766ad7f1a340f (from https://pypi.org/simple/docutils/), version: 0.3.5
    Found link https://files.pythonhosted.org/packages/06/f0/ba91d2970562ac496a429c286006fac84c9f51b9296ad0d3a34b5cd0f923/docutils-0.3.7.tar.gz#sha256=a7a81c71caa36b4576f33f8ab2acb62e9fdf868345e8215f1d1b19d83fd7beb4 (from https://pypi.org/simple/docutils/), version: 0.3.7
    Found link https://files.pythonhosted.org/packages/f0/a9/999787bf8b869b7ce2f7b5dd0f9fa1e77154875a8dd5ee0715768913b5b3/docutils-0.3.9.tar.gz#sha256=6b3cbd9b0fae3e2a7c7855e84a8cf9a5237fc2f52a946cbc669ccf7a72e6d1ab (from https://pypi.org/simple/docutils/), version: 0.3.9
    Found link https://files.pythonhosted.org/packages/18/da/9e25e6178d452f1f47e6ca1bbd876038c9fd0df0a64d0a3db40c33071ad1/docutils-0.4.tar.gz#sha256=b81f29e4f39540d06c7d8c0dc1a2c209816c47ce33a66ac50ee28ae38d242c0e (from https://pypi.org/simple/docutils/), version: 0.4
    Found link https://files.pythonhosted.org/packages/9d/21/3585fa6781b78b7fd7e257f64217188e97c775efd9f8c9bac90ced731bb7/docutils-0.5.tar.gz#sha256=747cf984edfca0575addbb42453274a1bdd98ec7780bd37a883dc8b2a66a610e (from https://pypi.org/simple/docutils/), version: 0.5
    Found link https://files.pythonhosted.org/packages/3c/85/3bee168f7fb06c3a48e0af4f6b3d02cfee91dec3a89b116b532ddf819364/docutils-0.6.tar.gz#sha256=04aa91bd644169b23ed02d692f407a2a4e326fbfec9754bce7662fcf59c917f2 (from https://pypi.org/simple/docutils/), version: 0.6
    Found link https://files.pythonhosted.org/packages/6a/30/3891cb6d713bae4dd578493944d5f78bf22b624e81ca76782d68fd6a0d01/docutils-0.7.tar.gz#sha256=cd8dc8e131813af9f4f1963f719611cccf23749dcf703f944bb4ac434393ea03 (from https://pypi.org/simple/docutils/), version: 0.7
    Found link https://files.pythonhosted.org/packages/e5/c0/7f7089b6d380d5d78cb37f5cfd5457959dd79c9e696c37f817a6f24a29be/docutils-0.8.tar.gz#sha256=4aec93d5c3e00c56923751eb940ddd4942c191367e466f5c77cfdd49a9cacbf4 (from https://pypi.org/simple/docutils/), version: 0.8
    Found link https://files.pythonhosted.org/packages/35/8b/b9168ac215c60c92df40fd78551757c3239235497533b74616bb156404aa/docutils-0.8.1.tar.gz#sha256=5a3b776518257a59fefaf48ef1e0635bc1179f8cafb02a9cc84c9644bb25df71 (from https://pypi.org/simple/docutils/), version: 0.8.1
    Found link https://files.pythonhosted.org/packages/13/98/de4fe2d3b085a4f408ec80117489f32ed0564c6d15eca0cf4a45441d8052/docutils-0.9.tar.gz#sha256=ff49bf77e9135490a73740d884b418ab8b982ad16ee52cfe796d059c592ea245 (from https://pypi.org/simple/docutils/), version: 0.9
    Found link https://files.pythonhosted.org/packages/d1/fd/e569a6139d5bfda5574b3a4bd840dd1b23d03fc7fcbb193bd1f450f98cc4/docutils-0.9.1.tar.gz#sha256=e89f187dbbc6674f839239c89fec44af9f18809b66a8a55a41b57b9ee2356994 (from https://pypi.org/simple/docutils/), version: 0.9.1
    Found link https://files.pythonhosted.org/packages/66/40/2b11ec2ec96d527ef933332a5847cc90860fd8bbee46da2cc468794ea25b/docutils-0.10.tar.gz#sha256=370624e61b6773da2f2fb17cc2a4eaea4bb596c3585d13f75ff193c1c738603e (from https://pypi.org/simple/docutils/), version: 0.10
    Found link https://files.pythonhosted.org/packages/7f/49/3ff69dcb212900199462a291886e2f30f57ab3a69dc88e31eda6404a17c0/docutils-0.11.tar.gz#sha256=9af4166adf364447289c5c697bb83c52f1d6f57e77849abcccd6a4a18a5e7ec9 (from https://pypi.org/simple/docutils/), version: 0.11
    Found link https://files.pythonhosted.org/packages/c7/16/29d8de2404c5b90243b51f91315b3ce375169ceb48a68aeec0862e0143c4/docutils-0.12-py3-none-any.whl#sha256=dcebd4928112631626f4c4d0df59787c748404e66dda952110030ea883d3b8cd (from https://pypi.org/simple/docutils/), version: 0.12
    Found link https://files.pythonhosted.org/packages/37/38/ceda70135b9144d84884ae2fc5886c6baac4edea39550f28bcd144c1234d/docutils-0.12.tar.gz#sha256=c7db717810ab6965f66c8cf0398a98c9d8df982da39b4cd7f162911eb89596fa (from https://pypi.org/simple/docutils/), version: 0.12
    Skipping link https://files.pythonhosted.org/packages/5f/6d/e864b3c61b81eec57386ac62082fccfe694c7c3046d8723258a37da6d5fc/docutils-0.13.1-py2-none-any.whl#sha256=de454f1015958450b72641165c08afe7023cd7e3944396448f2fb1b0ccba9d77 (from https://pypi.org/simple/docutils/); it is not compatible with this Python
    Found link https://files.pythonhosted.org/packages/7c/30/8fb30d820c012a6f701a66618ce065b6d61d08ac0a77e47fc7808dbaee47/docutils-0.13.1-py3-none-any.whl#sha256=cb3ebcb09242804f84bdbf0b26504077a054da6772c6f4d625f335cc53ebf94d (from https://pypi.org/simple/docutils/), version: 0.13.1
    Found link https://files.pythonhosted.org/packages/05/25/7b5484aca5d46915493f1fd4ecb63c38c333bd32aa9ad6e19da8d08895ae/docutils-0.13.1.tar.gz#sha256=718c0f5fb677be0f34b781e04241c4067cbd9327b66bdd8e763201130f5175be (from https://pypi.org/simple/docutils/), version: 0.13.1
    Found link https://files.pythonhosted.org/packages/05/fd/d62c2944d9df894b07eaa7430decc4c80977e644922a85fbdec337d6af82/docutils-0.14rc1.tar.gz#sha256=7ee93a6fbab0f46bdda4d94384de40a04bbbbb53dbd019ce0fbbbfed22f6589a (from https://pypi.org/simple/docutils/), version: 0.14rc1
    Found link https://files.pythonhosted.org/packages/6b/57/6e68a5457ea9579f970d7854c090a6c991c8ab481df12e6be25ff505a4b0/docutils-0.14rc2.tar.gz#sha256=3caee0bcb2a49fdf24fcfa70849a60abb7a181aa68b030f7cb7494096181830c (from https://pypi.org/simple/docutils/), version: 0.14rc2
    Skipping link https://files.pythonhosted.org/packages/50/09/c53398e0005b11f7ffb27b7aa720c617aba53be4fb4f4f3f06b9b5c60f28/docutils-0.14-py2-none-any.whl#sha256=7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6 (from https://pypi.org/simple/docutils/); it is not compatible with this Python
    Found link https://files.pythonhosted.org/packages/36/fa/08e9e6e0e3cbd1d362c3bbee8d01d0aedb2155c4ac112b19ef3cae8eed8d/docutils-0.14-py3-none-any.whl#sha256=02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6 (from https://pypi.org/simple/docutils/), version: 0.14
    Found link https://files.pythonhosted.org/packages/84/f4/5771e41fdf52aabebbadecc9381d11dea0fa34e4759b4071244fa094804c/docutils-0.14.tar.gz#sha256=51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274 (from https://pypi.org/simple/docutils/), version: 0.14
    Found link https://files.pythonhosted.org/packages/ca/83/812ae4de24209ef41e967fdb635d10a8ef2f7555dd510d3e562b707b2643/docutils-0.15-py3-none-any.whl#sha256=d2ddba74835cb090a1b627d3de4e7835c628d07ee461f7b4480f51af2fe4d448 (from https://pypi.org/simple/docutils/), version: 0.15
    Skipping link https://files.pythonhosted.org/packages/d2/d8/06e83efbfafab5d342df8835f3aa81c1dbfadedbea39cc2d2f93742938a4/docutils-0.15.post1-py2-none-any.whl#sha256=ba4584f9107571ced0d2c7f56a5499c696215ba90797849c92d395979da68521 (from https://pypi.org/simple/docutils/); it is not compatible with this Python
    Found link https://files.pythonhosted.org/packages/72/0b/d728058694261c99fd5980419d77e1c4d63a390b26a6a0ea7f0993cd5c57/docutils-0.15.tar.gz#sha256=54a349c622ff31c91cbec43b0b512f113b5b24daf00e2ea530bb1bd9aac14849 (from https://pypi.org/simple/docutils/), version: 0.15
  ERROR: Could not find a version that satisfies the requirement docutils==0.15.post1 (from -r /tmp/pipenv-7ry13eyx-requirements/pipenv-_7eioysf-requirement.txt (line 1)) (from versions: 0.3, 0.3.5, 0.3.7, 0.3.9, 0.4, 0.5, 0.6, 0.7, 0.8, 0.8.1, 0.9, 0.9.1, 0.10, 0.11, 0.12, 0.13.1, 0.14rc1, 0.14rc2, 0.14, 0.15)
Cleaning up...
Removed build tracker '/tmp/pip-req-tracker-_bavf9s6'
ERROR: No matching distribution found for docutils==0.15.post1 (from -r /tmp/pipenv-7ry13eyx-requirements/pipenv-_7eioysf-requirement.txt (line 1))
Exception information:
Traceback (most recent call last):
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/cli/base_command.py", line 178, in main
    status = self.run(options, args)
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/commands/install.py", line 352, in run
    resolver.resolve(requirement_set)
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/resolve.py", line 131, in resolve
    self._resolve_one(requirement_set, req)
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/resolve.py", line 294, in _resolve_one
    abstract_dist = self._get_abstract_dist_for(req_to_install)
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/resolve.py", line 242, in _get_abstract_dist_for
    self.require_hashes
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/operations/prepare.py", line 282, in prepare_linked_requirement
    req.populate_link(finder, upgrade_allowed, require_hashes)
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/req/req_install.py", line 198, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/index.py", line 792, in find_requirement
    'No matching distribution found for %s' % req
pip._internal.exceptions.DistributionNotFound: No matching distribution found for docutils==0.15.post1 (from -r /tmp/pipenv-7ry13eyx-requirements/pipenv-_7eioysf-requirement.txt (line 1))
An error occurred while installing docutils==0.15.post1 --hash=sha256:ba4584f9107571ced0d2c7f56a5499c696215ba90797849c92d395979da68521! Will try again.
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 1/1 — 00:00:00
Installing initially failed dependencies…
Installing 'docutils'▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/1 — 00:00:00
$ ['/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/bin/pip', 'install', '--verbose', '--upgrade', '--no-deps', '-r', '/tmp/pipenv-7ry13eyx-requirements/pipenv-y1ua0761-requirement.txt', '-i', 'https://pypi.org/simple', '--require-hashes']
Created temporary directory: /tmp/pip-ephem-wheel-cache-3y0jnshm
Created temporary directory: /tmp/pip-req-tracker-8kozur2y
Created requirements tracker '/tmp/pip-req-tracker-8kozur2y'
Created temporary directory: /tmp/pip-install-1nlwfuxf
Collecting docutils==0.15.post1 (from -r /tmp/pipenv-7ry13eyx-requirements/pipenv-y1ua0761-requirement.txt (line 1))
  1 location(s) to search for versions of docutils:
  * https://pypi.org/simple/docutils/
  Getting page https://pypi.org/simple/docutils/
  Looking up "https://pypi.org/simple/docutils/" in the cache
  Request header has "max_age" as 0, cache bypassed
  Starting new HTTPS connection (1): pypi.org:443
  https://pypi.org:443 "GET /simple/docutils/ HTTP/1.1" 304 0
  Analyzing links from page https://pypi.org/simple/docutils/
    Found link https://files.pythonhosted.org/packages/3e/a3/381d27fae58a59915440374367712bf2442c3feda26d021263041b3809ba/docutils-0.3.tar.gz#sha256=13d4efb5c105a3440cfc2e4124a455016e9e117e2afda6bf3583142215dca988 (from https://pypi.org/simple/docutils/), version: 0.3
    Found link https://files.pythonhosted.org/packages/b2/ff/5040ee72b3ec93fdeb6fec6c712f684d6811bebf87c413c651c47ab10580/docutils-0.3.5.tar.gz#sha256=45c53691e6ba7e96f60dfa6f93c012749d7d8068489419ef608766ad7f1a340f (from https://pypi.org/simple/docutils/), version: 0.3.5
    Found link https://files.pythonhosted.org/packages/06/f0/ba91d2970562ac496a429c286006fac84c9f51b9296ad0d3a34b5cd0f923/docutils-0.3.7.tar.gz#sha256=a7a81c71caa36b4576f33f8ab2acb62e9fdf868345e8215f1d1b19d83fd7beb4 (from https://pypi.org/simple/docutils/), version: 0.3.7
    Found link https://files.pythonhosted.org/packages/f0/a9/999787bf8b869b7ce2f7b5dd0f9fa1e77154875a8dd5ee0715768913b5b3/docutils-0.3.9.tar.gz#sha256=6b3cbd9b0fae3e2a7c7855e84a8cf9a5237fc2f52a946cbc669ccf7a72e6d1ab (from https://pypi.org/simple/docutils/), version: 0.3.9
    Found link https://files.pythonhosted.org/packages/18/da/9e25e6178d452f1f47e6ca1bbd876038c9fd0df0a64d0a3db40c33071ad1/docutils-0.4.tar.gz#sha256=b81f29e4f39540d06c7d8c0dc1a2c209816c47ce33a66ac50ee28ae38d242c0e (from https://pypi.org/simple/docutils/), version: 0.4
    Found link https://files.pythonhosted.org/packages/9d/21/3585fa6781b78b7fd7e257f64217188e97c775efd9f8c9bac90ced731bb7/docutils-0.5.tar.gz#sha256=747cf984edfca0575addbb42453274a1bdd98ec7780bd37a883dc8b2a66a610e (from https://pypi.org/simple/docutils/), version: 0.5
    Found link https://files.pythonhosted.org/packages/3c/85/3bee168f7fb06c3a48e0af4f6b3d02cfee91dec3a89b116b532ddf819364/docutils-0.6.tar.gz#sha256=04aa91bd644169b23ed02d692f407a2a4e326fbfec9754bce7662fcf59c917f2 (from https://pypi.org/simple/docutils/), version: 0.6
    Found link https://files.pythonhosted.org/packages/6a/30/3891cb6d713bae4dd578493944d5f78bf22b624e81ca76782d68fd6a0d01/docutils-0.7.tar.gz#sha256=cd8dc8e131813af9f4f1963f719611cccf23749dcf703f944bb4ac434393ea03 (from https://pypi.org/simple/docutils/), version: 0.7
    Found link https://files.pythonhosted.org/packages/e5/c0/7f7089b6d380d5d78cb37f5cfd5457959dd79c9e696c37f817a6f24a29be/docutils-0.8.tar.gz#sha256=4aec93d5c3e00c56923751eb940ddd4942c191367e466f5c77cfdd49a9cacbf4 (from https://pypi.org/simple/docutils/), version: 0.8
    Found link https://files.pythonhosted.org/packages/35/8b/b9168ac215c60c92df40fd78551757c3239235497533b74616bb156404aa/docutils-0.8.1.tar.gz#sha256=5a3b776518257a59fefaf48ef1e0635bc1179f8cafb02a9cc84c9644bb25df71 (from https://pypi.org/simple/docutils/), version: 0.8.1
    Found link https://files.pythonhosted.org/packages/13/98/de4fe2d3b085a4f408ec80117489f32ed0564c6d15eca0cf4a45441d8052/docutils-0.9.tar.gz#sha256=ff49bf77e9135490a73740d884b418ab8b982ad16ee52cfe796d059c592ea245 (from https://pypi.org/simple/docutils/), version: 0.9
    Found link https://files.pythonhosted.org/packages/d1/fd/e569a6139d5bfda5574b3a4bd840dd1b23d03fc7fcbb193bd1f450f98cc4/docutils-0.9.1.tar.gz#sha256=e89f187dbbc6674f839239c89fec44af9f18809b66a8a55a41b57b9ee2356994 (from https://pypi.org/simple/docutils/), version: 0.9.1
    Found link https://files.pythonhosted.org/packages/66/40/2b11ec2ec96d527ef933332a5847cc90860fd8bbee46da2cc468794ea25b/docutils-0.10.tar.gz#sha256=370624e61b6773da2f2fb17cc2a4eaea4bb596c3585d13f75ff193c1c738603e (from https://pypi.org/simple/docutils/), version: 0.10
    Found link https://files.pythonhosted.org/packages/7f/49/3ff69dcb212900199462a291886e2f30f57ab3a69dc88e31eda6404a17c0/docutils-0.11.tar.gz#sha256=9af4166adf364447289c5c697bb83c52f1d6f57e77849abcccd6a4a18a5e7ec9 (from https://pypi.org/simple/docutils/), version: 0.11
    Found link https://files.pythonhosted.org/packages/c7/16/29d8de2404c5b90243b51f91315b3ce375169ceb48a68aeec0862e0143c4/docutils-0.12-py3-none-any.whl#sha256=dcebd4928112631626f4c4d0df59787c748404e66dda952110030ea883d3b8cd (from https://pypi.org/simple/docutils/), version: 0.12
    Found link https://files.pythonhosted.org/packages/37/38/ceda70135b9144d84884ae2fc5886c6baac4edea39550f28bcd144c1234d/docutils-0.12.tar.gz#sha256=c7db717810ab6965f66c8cf0398a98c9d8df982da39b4cd7f162911eb89596fa (from https://pypi.org/simple/docutils/), version: 0.12
    Skipping link https://files.pythonhosted.org/packages/5f/6d/e864b3c61b81eec57386ac62082fccfe694c7c3046d8723258a37da6d5fc/docutils-0.13.1-py2-none-any.whl#sha256=de454f1015958450b72641165c08afe7023cd7e3944396448f2fb1b0ccba9d77 (from https://pypi.org/simple/docutils/); it is not compatible with this Python
    Found link https://files.pythonhosted.org/packages/7c/30/8fb30d820c012a6f701a66618ce065b6d61d08ac0a77e47fc7808dbaee47/docutils-0.13.1-py3-none-any.whl#sha256=cb3ebcb09242804f84bdbf0b26504077a054da6772c6f4d625f335cc53ebf94d (from https://pypi.org/simple/docutils/), version: 0.13.1
    Found link https://files.pythonhosted.org/packages/05/25/7b5484aca5d46915493f1fd4ecb63c38c333bd32aa9ad6e19da8d08895ae/docutils-0.13.1.tar.gz#sha256=718c0f5fb677be0f34b781e04241c4067cbd9327b66bdd8e763201130f5175be (from https://pypi.org/simple/docutils/), version: 0.13.1
    Found link https://files.pythonhosted.org/packages/05/fd/d62c2944d9df894b07eaa7430decc4c80977e644922a85fbdec337d6af82/docutils-0.14rc1.tar.gz#sha256=7ee93a6fbab0f46bdda4d94384de40a04bbbbb53dbd019ce0fbbbfed22f6589a (from https://pypi.org/simple/docutils/), version: 0.14rc1
    Found link https://files.pythonhosted.org/packages/6b/57/6e68a5457ea9579f970d7854c090a6c991c8ab481df12e6be25ff505a4b0/docutils-0.14rc2.tar.gz#sha256=3caee0bcb2a49fdf24fcfa70849a60abb7a181aa68b030f7cb7494096181830c (from https://pypi.org/simple/docutils/), version: 0.14rc2
    Skipping link https://files.pythonhosted.org/packages/50/09/c53398e0005b11f7ffb27b7aa720c617aba53be4fb4f4f3f06b9b5c60f28/docutils-0.14-py2-none-any.whl#sha256=7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6 (from https://pypi.org/simple/docutils/); it is not compatible with this Python
    Found link https://files.pythonhosted.org/packages/36/fa/08e9e6e0e3cbd1d362c3bbee8d01d0aedb2155c4ac112b19ef3cae8eed8d/docutils-0.14-py3-none-any.whl#sha256=02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6 (from https://pypi.org/simple/docutils/), version: 0.14
    Found link https://files.pythonhosted.org/packages/84/f4/5771e41fdf52aabebbadecc9381d11dea0fa34e4759b4071244fa094804c/docutils-0.14.tar.gz#sha256=51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274 (from https://pypi.org/simple/docutils/), version: 0.14
    Found link https://files.pythonhosted.org/packages/ca/83/812ae4de24209ef41e967fdb635d10a8ef2f7555dd510d3e562b707b2643/docutils-0.15-py3-none-any.whl#sha256=d2ddba74835cb090a1b627d3de4e7835c628d07ee461f7b4480f51af2fe4d448 (from https://pypi.org/simple/docutils/), version: 0.15
    Skipping link https://files.pythonhosted.org/packages/d2/d8/06e83efbfafab5d342df8835f3aa81c1dbfadedbea39cc2d2f93742938a4/docutils-0.15.post1-py2-none-any.whl#sha256=ba4584f9107571ced0d2c7f56a5499c696215ba90797849c92d395979da68521 (from https://pypi.org/simple/docutils/); it is not compatible with this Python
    Found link https://files.pythonhosted.org/packages/72/0b/d728058694261c99fd5980419d77e1c4d63a390b26a6a0ea7f0993cd5c57/docutils-0.15.tar.gz#sha256=54a349c622ff31c91cbec43b0b512f113b5b24daf00e2ea530bb1bd9aac14849 (from https://pypi.org/simple/docutils/), version: 0.15
Cleaning up...
Removed build tracker '/tmp/pip-req-tracker-8kozur2y'
Exception information:
Traceback (most recent call last):
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/cli/base_command.py", line 178, in main
    status = self.run(options, args)
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/commands/install.py", line 352, in run
    resolver.resolve(requirement_set)
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/resolve.py", line 131, in resolve
    self._resolve_one(requirement_set, req)
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/resolve.py", line 294, in _resolve_one
    abstract_dist = self._get_abstract_dist_for(req_to_install)
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/resolve.py", line 242, in _get_abstract_dist_for
    self.require_hashes
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/operations/prepare.py", line 282, in prepare_linked_requirement
    req.populate_link(finder, upgrade_allowed, require_hashes)
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/req/req_install.py", line 198, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "/home/adam/.local/share/virtualenvs/reproducer-OJ9QCKUl/lib/python3.7/site-packages/pip/_internal/index.py", line 792, in find_requirement
    'No matching distribution found for %s' % req
pip._internal.exceptions.DistributionNotFound: No matching distribution found for docutils==0.15.post1 (from -r /tmp/pipenv-7ry13eyx-requirements/pipenv-y1ua0761-requirement.txt (line 1))
Traceback (most recent call last):
  File "/home/adam/.local/bin/pipenv", line 10, in <module>
    sys.exit(cli())
  File "/home/adam/.local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/home/adam/.local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/home/adam/.local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/adam/.local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/adam/.local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/adam/.local/lib/python3.7/site-packages/pipenv/vendor/click/decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/home/adam/.local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/adam/.local/lib/python3.7/site-packages/pipenv/vendor/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/adam/.local/lib/python3.7/site-packages/pipenv/cli/command.py", line 254, in install
    editable_packages=state.installstate.editables,
  File "/home/adam/.local/lib/python3.7/site-packages/pipenv/core.py", line 1992, in do_install
    skip_lock=skip_lock,
  File "/home/adam/.local/lib/python3.7/site-packages/pipenv/core.py", line 1253, in do_init
    pypi_mirror=pypi_mirror,
  File "/home/adam/.local/lib/python3.7/site-packages/pipenv/core.py", line 859, in do_install_dependencies
    retry_list, procs, failed_deps_queue, requirements_dir, **install_kwargs
  File "/home/adam/.local/lib/python3.7/site-packages/pipenv/core.py", line 763, in batch_install
    _cleanup_procs(procs, not blocking, failed_deps_queue, retry=retry)
  File "/home/adam/.local/lib/python3.7/site-packages/pipenv/core.py", line 681, in _cleanup_procs
    raise exceptions.InstallError(c.dep.name, extra=err_lines)
pipenv.exceptions.InstallError: ERROR: ERROR: Package installation failed...
  ☤  ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/1 — 00:00:00

Steps to replicate

  • mkdir test
  • cd test
  • pipenv install --three docutils

$ pipenv --support

Pipenv version: '2018.11.26'

Pipenv location: '/home/adam/.local/lib/python3.7/site-packages/pipenv'

Python location: '/usr/bin/python'

Python installations found:

  • 3.7.3: /usr/bin/python3
  • 3.7.3: /usr/bin/python3.7m
  • 3.6.9: /usr/bin/python3.6
  • 3.6.9: /usr/bin/python3.6m
  • 2.7.16: /usr/bin/python2

PEP 508 Information:

{'implementation_name': 'cpython',
 'implementation_version': '3.7.3',
 'os_name': 'posix',
 'platform_machine': 'x86_64',
 'platform_python_implementation': 'CPython',
 'platform_release': '5.2.1-arch1-1-ARCH',
 'platform_system': 'Linux',
 'platform_version': '#1 SMP PREEMPT Sun Jul 14 14:52:52 UTC 2019',
 'python_full_version': '3.7.3',
 'python_version': '3.7',
 'sys_platform': 'linux'}

System environment variables:

  • PATH
  • SSH_AUTH_SOCK
  • PAGER
  • SSH_AGENT_PID
  • LANG
  • LESS_TERMCAP_me
  • _JAVA_OPTIONS
  • MOZ_PLUGIN_PATH
  • WINDOWID
  • CUDA_PATH
  • SHLVL
  • GTK_CSD
  • LESS_TERMCAP_us
  • HOME
  • XDG_CONFIG_HOME
  • USER
  • OLDPWD
  • QT_AUTO_SCREEN_SCALE_FACTOR
  • DBUS_SESSION_BUS_ADDRESS
  • XDG_VTNR
  • XDG_SEAT
  • GTK_MODULES
  • LESS_TERMCAP_mb
  • CLOUDSDK_PYTHON_ARGS
  • LS_COLORS
  • LESS_TERMCAP_so
  • GTK_THEME
  • JOURNAL_STREAM
  • CLOUDSDK_ROOT_DIR
  • WINDOWPATH
  • MAIL
  • LOGNAME
  • GDK_DPI_SCALE
  • VTE_VERSION
  • LESS_TERMCAP_ue
  • XDG_RUNTIME_DIR
  • _
  • LESS_TERMCAP_se
  • SHELL
  • XDG_SESSION_TYPE
  • XDG_SESSION_ID
  • CLOUDSDK_PYTHON
  • GEM_HOME
  • EDITOR
  • GPG_TTY
  • INVOCATION_ID
  • LD_PRELOAD
  • XAUTHORITY
  • GOOGLE_CLOUD_SDK_HOME
  • COLORTERM
  • XDG_SESSION_CLASS
  • TERM
  • PWD
  • DISPLAY
  • LESS_TERMCAP_md
  • LC_MESSAGES
  • PIP_DISABLE_PIP_VERSION_CHECK
  • PYTHONDONTWRITEBYTECODE
  • PIP_SHIMS_BASE_MODULE
  • PIP_PYTHON_PATH
  • PYTHONFINDER_IGNORE_UNSUPPORTED

Pipenv–specific environment variables:

Debug–specific environment variables:

  • PATH: /opt/google-cloud-sdk/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/cuda/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/adam/.cabal/bin:/home/adam/.gem/ruby/2.6.0/bin:/home/adam/.cabal/bin:/home/adam/.gem/ruby/2.6.0/bin:/home/adam/.local/bin
  • SHELL: /bin/zsh
  • EDITOR: vim
  • LANG: en_US.UTF-8
  • PWD: /home/adam/tmp/reproducer

Contents of Pipfile ('/home/adam/tmp/reproducer/Pipfile'):

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

[dev-packages]

[packages]
docutils = "*"

[requires]
python_version = "3.7"

Contents of Pipfile.lock ('/home/adam/tmp/reproducer/Pipfile.lock'):

{
    "_meta": {
        "hash": {
            "sha256": "889db584edefe8dd0ef05061f489014e51b666d5f9fe8c7c8b23724182c8fbe9"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.7"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "docutils": {
            "hashes": [
                "sha256:ba4584f9107571ced0d2c7f56a5499c696215ba90797849c92d395979da68521"
            ],
            "index": "pypi",
            "version": "==0.15.post1"
        }
    },
    "develop": {}
}

Dependency Resolution Future Type Discussion

Most helpful comment

I would like to request this issue to be reopened for the following reasons:

  • Similar to @node13h, docutils is not a direct dependency of my project. Including it in Pipfile to pin its version would create a false impression, and a manual overhead in monitoring its version and resolving which version is the best for me during upgrade (which Pipenv should be doing).
  • This package can be correctly installed using pip, and also using poetry. There is something wrong with the dependency resolution process of Pipenv, and it breaks projects which run pipenv lock and (directly or indirectly) depend on docutils.
  • Is this "inconsistent release" actually disallowed on PyPI? If not, then leaving this issue unaddressed could mean that (from the point of view of the user) Pipenv is unable to install a perfectly valid package from PyPI.

All 15 comments

In my case docutils is not a direct dependency (my project -> twine - > readme-renderer -> docutils) therefore pinning it to a specific version in Pipfile (as a workaround) would give a false impression it is now a direct dependency of my project

I just ran into this problem myself, but workaround of pinning docutils to 0.15 is good enough for me right now.

I just ran into this problem myself, but workaround of pinning docutils to 0.15 is good enough for me right now.

You may have to re-run pipenv lock after pinning.

With the workaround to pin version to ==0.15 this problem can be resolved. Since it is an issue with the inconsistent release and there is not much pipenv can do unless hacking deep into the resolution process.

I'd like to close it for now. Feel free to reopen if you feel it is critical and can't be neglected.

I would like to request this issue to be reopened for the following reasons:

  • Similar to @node13h, docutils is not a direct dependency of my project. Including it in Pipfile to pin its version would create a false impression, and a manual overhead in monitoring its version and resolving which version is the best for me during upgrade (which Pipenv should be doing).
  • This package can be correctly installed using pip, and also using poetry. There is something wrong with the dependency resolution process of Pipenv, and it breaks projects which run pipenv lock and (directly or indirectly) depend on docutils.
  • Is this "inconsistent release" actually disallowed on PyPI? If not, then leaving this issue unaddressed could mean that (from the point of view of the user) Pipenv is unable to install a perfectly valid package from PyPI.

Sure, leave this issue open for more discussion.

Pipenv used a patched version of pip for resolution, which causes the difference from original pip or poetry. The patch that makes this difference comes from a commit a year ago(4e906e4bc0df095ed3d61d4d283af02c76ec76d2), which allows incompatible versions to be counted. The patch is there to sort some problems out but I can't figure out what they are.

/cc @techalchemy for any background of the change and I wonder if we can revert this.


Ah, here it is #1586

From my understanding, it enables cross-version resolution. If we turn ignore_compatibility=True then this kind of resolution will be broken.

Support for blacklisting specific versions as a separate config option would be nice.

Pinning (==0.15) or blacklisting (!=015.post1) a non-direct dependency in the [packages] or [dev-packages] sections is not the same, as it would mean Pipenv will keep installing that package even if other packages stop depending on it in the future.

Another option would be to exclude (perhaps as an option) package versions not available for all platforms when searching for the latest version. However, that would prevent projects which do not want to be cross-platform from installing a version of the package not available on the platform they don't care about.

This issue is not new, and while I understand the reasoning behind the current logic, I still think users should be given more control over the process.

indeed, the resolver should have ignored the post version (it is a preversion-like release, so should not be "seen" by default). But also if the package is not provided for the current architecture, the resolver should also ignore it.

Just from a user's perspective it is confusing that an installation running Python 3 is trying to pull a package version for which only a Python 2.x release exists.

IMHO Pipenv should ignore the 0.15.0post1 until a Python 3 compatible version is available.

I'd like to put more information about the logic behind this behavior, I am not saying it is right.

Pipenv tries to find the most recent release of a package, record hashes of all artifacts, whether compatible or not, into the lockfile. That is to say, resolver is not aware of which python is used when locking and assumes a release should provide artifacts for all platforms and pythons. When user installs package from the lock file, the installer will scan all hashes list there and pick a compatible one to install. This enables user to install under a different environment from what is used in development.

The problem is, the Pipenv resolver picks 0.15.0post1, while it only contains a wheel for Py2. so the assumption in the above paragraph doesn't hold. This usually happens when the owner uploaded a broken artifact and re-uploaded with the fix.

Further more, .post{n} isn't a prerelease version which will be ignored by Pipenv automatically. On PyPI, we can see it is list under 0.15.0 release page. I would say if we regard 0.15.0.post{n} the same version as 0.15.0, things will get resolved, because Pipenv can then lock 0.15.0.post1 and 0.15.0 hashes under the package meta.

hum, I don't understand the "resolver is not aware of which python is used when locking", it should be, or else it would not be able to respect the marker python_version < '3.5'.

According to pep440, post version are strongly discouraged.

The use of post-releases to publish maintenance releases containing actual bug fixes is strongly discouraged. In general, it is better to use a longer release number and increment the final component for each maintenance release.

Post-releases are also permitted for pre-releases:

X.YaN.postM # Post-release of an alpha release
X.YbN.postM # Post-release of a beta release
X.YrcN.postM # Post-release of a release candidate

I think post-version should be discarded like any real version. In any case, if the maintainer did a bad job on uploading the package, even official release, for example if the package for the current environment is broken, the resolver should try the version before to ensure the dev can continue working. Error happens.

@gsemet I read this differently. Post releases are discouraged for _maintenance releases containing actual bug fixes_. They are fine to use to fix broken wheels.

Indeed, but this shows package manager can upload release without all platforms... that’s disgusting but it existe

Post-release can be a separate release https://pypi.org/project/atoml/0.2.0.post0/ and a fixed artifact uploaded to the release version(docutils 0.15.0). From the /simple page, it is hard to make a decision what the post-release belongs to.

Docutils has made a new release with a universal source tarball for the post-release. So further installation won't fail.

I believe that this has been fixed - I removed the docutils= "==0.15" pin from my project's Pipfile and pipenv update succeeds. docutils==0.15.2 now gets installed.

Was this page helpful?
0 / 5 - 0 ratings