text:
Not all packages installed in spite of no errors seen

Issue description
I am building a Docker image using Dockerfile. It runs the command pipenv install --system --deploy --sequential --clear --verbose. It finishes without failure but still some packages are still missing from site-packages.
Expected result
I expect all packages to have been installed, or an error to be thrown.
Actual result
Installing 'babel'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '--no-deps', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-770l6ctv-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'blinker'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '--no-deps', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-e696mv2t-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'certifi'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '--no-deps', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-6idxog5f-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'chardet'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '--no-deps', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-cjn8h4xo-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'click'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '--no-deps', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-l46_no8f-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'flask'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '--no-deps', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-kwe259kl-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'flask-babel'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '--no-deps', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-merlj6xi-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'flask-classy'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '"git+https://github.com/ripperdoc/flask-classy@cbd1f8381a46dd6dc59b1dc54193cf0331927cca#egg=flask-classy"', '-i', 'https://pypi.python.org/simple']
    Installing 'flask-debugtoolbar'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-5zjyvpt4-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'flask-mongoengine'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-nre2bchj-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'flask-wtf'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '"git+https://github.com/lepture/flask-wtf.git@9b029c379cfda2a7463cf771f933a1c425b4ce16#egg=flask-wtf"', '-i', 'https://pypi.python.org/simple']
    Installing 'future'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-o54uqkxy-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'gunicorn'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-75fv4y60-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'idna'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-euyt1i5b-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'ipaddress'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-zi_pua76-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'itsdangerous'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-2lph80k3-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'jinja2'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-graw1vih-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'lepl'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-opx9830k-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'markdown'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-n97g0io9-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'markupsafe'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-25ychfl7-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'mongoengine'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-frghyn75-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'pillow'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-e37jpw1z-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'ptvsd'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-m1up7xy7-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'py-gfm'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-1eksqgcw-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'pymongo'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-9i434z0t-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'pyqrcode'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-evq88dgw-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'python-dateutil'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-d92ofr08-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'python-magic'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-1ofyq7mx-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'python-slugify'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-4al2gibg-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'pytz'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-734s6c41-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'requests'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-1d2rqlh0-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'rfc6266'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-bfjldq5p-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'rollbar'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-zj0nfazu-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'six'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-ybz169l3-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'sparkpost'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-f2m6y_wh-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'speaklater'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-77_tgpm_-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'stripe'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-kg950thr-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'unidecode'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-sqb2b8ap-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'urllib3'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-6ci5e0pr-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'werkzeug'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-zskuogd7-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Installing 'wtforms'
    $ ['/usr/local/bin/pip', 'install', '--verbose', '--upgrade', '-r', '/tmp/pipenv-pybqh90l-requirements/pipenv-fy78tjiq-requirement.txt', '-i', 'https://pypi.python.org/simple', '--require-hashes']
    Created temporary directory: /tmp/pip-ephem-wheel-cache-u5e3ay31
    Created temporary directory: /tmp/pip-req-tracker-s8sdghjg
    Created requirements tracker '/tmp/pip-req-tracker-s8sdghjg'
    Created temporary directory: /tmp/pip-install-rstd_ql2
    Looking in indexes: https://pypi.python.org/simple
    Collecting babel==2.5.3 (from -r /tmp/pipenv-pybqh90l-requirements/pipenv-770l6ctv-requirement.txt (line 1))
    1 location(s) to search for versions of babel:
    * https://pypi.python.org/simple/babel/
    Getting page https://pypi.python.org/simple/babel/
    Looking up "https://pypi.python.org/simple/babel/" in the cache
    Request header has "max_age" as 0, cache bypassed
    Starting new HTTPS connection (1): pypi.python.org:443
    https://pypi.python.org:443 "GET /simple/babel/ HTTP/1.1" 301 122
    Updating cache with response from "https://pypi.python.org/simple/babel/"
    Caching permanant redirect
    Looking up "https://pypi.org/simple/babel/" 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/babel/ HTTP/1.1" 200 3761
    Updating cache with response from "https://pypi.org/simple/babel/"
    Caching due to etag
    Analyzing links from page https://pypi.org/simple/babel/
    Skipping link https://files.pythonhosted.org/packages/e6/16/6d54f756bcbb658cb61d35d860eb280df9466a6cd71171aae341a9512f3a/Babel-0.9.6-py2.3.egg#sha256=b29dd100dbcfbe2ad83ed8faf1076cedbae4912ef3189e8aa092fed205ad40c4 (from https://pypi.org/simple/babel/); unsupported archive format: .egg
    Skipping link https://files.pythonhosted.org/packages/6d/56/503a8e4d4987d598d258a163308a03115a9e0f9ef69d6100ede3f81ea367/Babel-0.9.6-py2.4.egg#sha256=89c43eabe1eb606455c1921a595241b2c0c98dbb1b0aaaf35ddcf2e7428c9882 (from https://pypi.org/simple/babel/); unsupported archive format: .egg
    Skipping link https://files.pythonhosted.org/packages/2d/d1/fbcc2008c6581ad30d3bae9394671eea729dfd211fa5214e480310ba3ed7/Babel-0.9.6-py2.5.egg#sha256=c0d3424b3e8a41e53d536a448be85f1969d186daf571f277c3d2c1b258241c67 (from https://pypi.org/simple/babel/); unsupported archive format: .egg
    Skipping link https://files.pythonhosted.org/packages/5a/9d/2ed1579c088a6c5953bf31b9929cb0b2421252bd0f7fceed6e9e8f21b007/Babel-0.9.6-py2.6.egg#sha256=b99a0e43027d2ad5f1e8f55a96eea5f25d06f8a35d9af30cc29ff1aa196c088b (from https://pypi.org/simple/babel/); unsupported archive format: .egg
    Skipping link https://files.pythonhosted.org/packages/6b/00/ce976c63f004a440efb77a3a58315fbc08139171998787a64be836e7686e/Babel-0.9.6-py2.7.egg#sha256=65e7f3df394cbd163345247345a2956451a9f102497ebf12b32ba3f229f3ecc8 (from https://pypi.org/simple/babel/); unsupported archive format: .egg
    Found link https://files.pythonhosted.org/packages/47/d8/84943abdffcc0f910327a08651e857e682efcda80e6650b1aa93679d5f60/Babel-0.9.6.tar.gz#sha256=4a3a085ecf1fcd2736573538ffa114f1f4331b3bbbdd69381e6e172c49c9750f (from https://pypi.org/simple/babel/), version: 0.9.6
    Skipping link https://files.pythonhosted.org/packages/e2/c9/abfa44679392183909e74739442a9025345c0d6d3bdf3281ad59bb1981b6/Babel-0.9.6.win32.exe#sha256=eac5a36fd394954abdca25f680882ff2df01056dc5fe579f939f22e4e4114df4 (from https://pypi.org/simple/babel/); unsupported archive format: .exe
    Found link https://files.pythonhosted.org/packages/8b/bf/cf6408434941548c26626c4b2f515e100eff78a7fce1c1248c7af94ab893/Babel-0.9.6.zip#sha256=149859d2b43da82ef61370a00c277578caf6048625d1456db8cbf22e49938dd6 (from https://pypi.org/simple/babel/), version: 0.9.6
    Found link https://files.pythonhosted.org/packages/7c/03/4314d98f0c1cdbd7f0c9b295e62a9a84650bf653581719e6fa89108b00fa/Babel-1.0.tar.gz#sha256=abf1965b3ea34bfec77d4b806b66d7fa9a6c684f34be0829408f288035cdfc83 (from https://pypi.org/simple/babel/), version: 1.0
    Found link https://files.pythonhosted.org/packages/14/2b/07da6390513486f2ca9284f8d17d692593b180ab426a788b466ab00dda7d/Babel-1.1.tar.gz#sha256=52a9174f0914b17034907ae4a20b62e21e2341e88aeec892675b24db2b9f3a0e (from https://pypi.org/simple/babel/), version: 1.1
    Found link https://files.pythonhosted.org/packages/ad/82/18617389832560ce449c229704373e2b09a6ce39a8e35cc31507a965805d/Babel-1.2.tar.gz#sha256=f33115628e1507924d7c929ba8752658ace1a98c47ee0aa6e28bfc02bda5abfc (from https://pypi.org/simple/babel/), version: 1.2
    Found link https://files.pythonhosted.org/packages/33/27/e3978243a03a76398c384c83f7ca879bc6e8f1511233a621fcada135606e/Babel-1.3.tar.gz#sha256=9f02d0357184de1f093c10012b52e7454a1008be6a5c185ab7a3307aceb1d12e (from https://pypi.org/simple/babel/), version: 1.3
    Found link https://files.pythonhosted.org/packages/e9/ad/dbe9dcca7cbd76bfac175ee52626582531ec3496a2668a1fe7dc5d505e96/Babel-2.0.tar.gz#sha256=44988df191123065af9857eca68e9151526a931c12659ca29904e4f11de7ec1b (from https://pypi.org/simple/babel/), version: 2.0
    Found link https://files.pythonhosted.org/packages/1d/6f/95f416917bbd85afd3b44417ab0d521920fbb5e65898abf21cbe788dbef8/Babel-2.1.1-py2.py3-none-any.whl#sha256=324978553daa4fae54c0bb7a360ba886d1bfbe3ac6299915857fff55f133feb7 (from https://pypi.org/simple/babel/), version: 2.1.1
    Found link https://files.pythonhosted.org/packages/b8/4c/f76e5d422bd92f0caa6cce05d93f5b2eca62bdd30532316fdf31e00ae8f1/Babel-2.1.1.tar.gz#sha256=7fb6d50effe88a087feb2036cb972fd7a893bf338361516f1a55a820bf7b5248 (from https://pypi.org/simple/babel/), version: 2.1.1
    Found link https://files.pythonhosted.org/packages/33/0e/7428041cddc3ff6e9a0f11cd2464b8bf6caed1b3879fcb9cf064f1ac7675/Babel-2.2.0-py2.py3-none-any.whl#sha256=fed07cbcdcb3de79b53a8220eebed21c93f8dbb3dbce1d9c6b1c4b09e8aecf2b (from https://pypi.org/simple/babel/), version: 2.2.0
    Found link https://files.pythonhosted.org/packages/08/00/278d52a7ba3c5f9709d50bd123d0cc4f66497a9bab1b6b2bc18d3fcced09/Babel-2.2.0.tar.gz#sha256=d8cb4c0e78148aee89560f9fe21587aa57739c975bb89ff66b1e842cc697428f (from https://pypi.org/simple/babel/), version: 2.2.0
    Found link https://files.pythonhosted.org/packages/f2/cb/1ddd0dce0c865fa0e17c0c04c792bb72ac45f78a6395aa3c000be31763d7/Babel-2.3.0-py2.py3-none-any.whl#sha256=140365dd23d9965418070510877ee3d51e9e13979e0412d28b050a5754696038 (from https://pypi.org/simple/babel/), version: 2.3.0
    Found link https://files.pythonhosted.org/packages/e0/2c/0646c563576282f0cc8983b5363afda2bbc1df78a6da68efaac8507bc43b/Babel-2.3.0.tar.gz#sha256=880ce4d80c7aac0bf9dd8dc7e806c059c89cc2f03166c482d3a55ad56c6b2030 (from https://pypi.org/simple/babel/), version: 2.3.0
    Found link https://files.pythonhosted.org/packages/b1/a4/7fbb785a70491262aa9fad6833f0373c6bf9417a63c65951b79000e1dd8c/Babel-2.3.1-py2.py3-none-any.whl#sha256=0a7a22124e2bf674d4cb1120e3fc69a0f51888ac731d86dbe747e3d484c17f45 (from https://pypi.org/simple/babel/), version: 2.3.1
    Found link https://files.pythonhosted.org/packages/98/04/d8fb91dd535e468b075565154502b5d4f158ed2789f92c5db6806d599b9f/Babel-2.3.1.tar.gz#sha256=ee54fe8db330611c0d43df98482cd3b2856f35e9eb94e58fa7703081bf8aa911 (from https://pypi.org/simple/babel/), version: 2.3.1
    Found link https://files.pythonhosted.org/packages/a8/90/ea6299b7dc9a63c79f19722e2aabe0b9a749bf669175a7775fbb407ddadf/Babel-2.3.2-py2.py3-none-any.whl#sha256=318a374096429471d43c1385e3d0408f26ce3d8308929f159ab248df6095da82 (from https://pypi.org/simple/babel/), version: 2.3.2
    Found link https://files.pythonhosted.org/packages/e0/66/c609a958a86846a690f5cad1cd035cdefeb18e6def1d2616da50c97a9841/Babel-2.3.2.tar.gz#sha256=9c0e011d2b5fd67e154be01ebec5eebf472e1277a34ec0856e97b77041bc834c (from https://pypi.org/simple/babel/), version: 2.3.2
    Found link https://files.pythonhosted.org/packages/96/28/d8b07b9e2fa99cda9b7bd2a319a8ffbc15f704a2059584a490b06db58b49/Babel-2.3.3-py2.py3-none-any.whl#sha256=33fe6090337ecc785bfa3c452a97e378676a19593f795258721090eb3de94e43 (from https://pypi.org/simple/babel/), version: 2.3.3
    Found link https://files.pythonhosted.org/packages/8c/77/e39a94131df796b130981eef8355169680f6060572a730c3e9457353f299/Babel-2.3.3.tar.gz#sha256=12dff9afa9c6cd6e2a39960d3cd4b46b2b98768cdc6646833c66b20799c1c58e (from https://pypi.org/simple/babel/), version: 2.3.3
    Found link https://files.pythonhosted.org/packages/b4/ec/acd307eac2e23f9cab1c8bdbe29b3b1d43215e31c32f8aa91b3a97925b5b/Babel-2.3.4-py2.py3-none-any.whl#sha256=3318ed2960240d61cbc6558858ee00c10eed77a6508c4d1ed8e6f7f48399c975 (from https://pypi.org/simple/babel/), version: 2.3.4
    Found link https://files.pythonhosted.org/packages/6e/96/ba2a2462ed25ca0e651fb7b66e7080f5315f91425a07ea5b34d7c870c114/Babel-2.3.4.tar.gz#sha256=c535c4403802f6eb38173cd4863e419e2274921a01a8aad8a5b497c131c62875 (from https://pypi.org/simple/babel/), version: 2.3.4
    Found link https://files.pythonhosted.org/packages/5f/cf/17935db603f7044d188ce3e3a6545c4b4500dbaa8835d50da2934b738111/Babel-2.4.0-py2.py3-none-any.whl#sha256=e86ca5a3a6bb64b9bbb62b9dac37225ec0ab5dfaae3c2492ebd648266468042f (from https://pypi.org/simple/babel/), version: 2.4.0
    Found link https://files.pythonhosted.org/packages/92/22/643f3b75f75e0220c5ef9f5b72b619ccffe9266170143a4821d4885198de/Babel-2.4.0.tar.gz#sha256=8c98f5e5f8f5f088571f2c6bd88d530e331cbbcb95a7311a0db69d3dca7ec563 (from https://pypi.org/simple/babel/), version: 2.4.0
    Found link https://files.pythonhosted.org/packages/88/69/bee7f293436ed3c653b34d9c89ff1324428639981dd6d2e7bc1b7adf2b95/Babel-2.5.0-py2.py3-none-any.whl#sha256=e0d07af61ff43729f61dc838f2af283c315e671454e7cf9d744ac9c56cccfca6 (from https://pypi.org/simple/babel/), version: 2.5.0
    Found link https://files.pythonhosted.org/packages/3a/cb/46b76381ebda237c1b08d1c94394659679a4f1bd6475fe3703b303830ee0/Babel-2.5.0.tar.gz#sha256=754177ee7481b6fac1bf84edeeb6338ab51640984e97e4083657d384b1c8830d (from https://pypi.org/simple/babel/), version: 2.5.0
    Found link https://files.pythonhosted.org/packages/36/80/99c5e2b07a4c85683f9884e993660bbb02051f77c4e63293348801aaa594/Babel-2.5.1-py2.py3-none-any.whl#sha256=f20b2acd44f587988ff185d8949c3e208b4b3d5d20fcab7d91fe481ffa435528 (from https://pypi.org/simple/babel/), version: 2.5.1
    Found link https://files.pythonhosted.org/packages/5a/22/63f1dbb8514bb7e0d0c8a85cc9b14506599a075e231985f98afd70430e1f/Babel-2.5.1.tar.gz#sha256=6007daf714d0cd5524bbe436e2d42b3c20e68da66289559341e48d2cd6d25811 (from https://pypi.org/simple/babel/), version: 2.5.1
    Found link https://files.pythonhosted.org/packages/6d/f0/32a4c2389e5a3c6507884cd4d7501b35d2bb8b2c0938e1d44ccfc6f238df/Babel-2.5.2-py2.py3-none-any.whl#sha256=3dc5399f1d0672c200e69759612ed751cb9edc46fc2df1c5faf42a88f54b18cb (from https://pypi.org/simple/babel/), version: 2.5.2
    Found link https://files.pythonhosted.org/packages/ab/0d/03da6e363ef2aa2c0d84e373d49553fa2e90ef73a89d0994106acbea5220/Babel-2.5.2.tar.gz#sha256=f9ecc03310233ffa9f2575bda3ebccf9ee3ece18ace7239aa83ca56a368844f9 (from https://pypi.org/simple/babel/), version: 2.5.2
    Found link https://files.pythonhosted.org/packages/94/03/14e68ad12e771a79cf96792f7158d68a7b3d8c7b2badf39e9ef1f65b57d6/Babel-2.5.3-py2.py3-none-any.whl#sha256=ad209a68d7162c4cff4b29cdebe3dec4cef75492df501b0049a9433c96ce6f80 (from https://pypi.org/simple/babel/), version: 2.5.3
    Found link https://files.pythonhosted.org/packages/0e/d5/9b1d6a79c975d0e9a32bd337a1465518c2519b14b214682ca9892752417e/Babel-2.5.3.tar.gz#sha256=8ce4cb6fdd4393edd323227cba3a077bceb2a6ce5201c902c65e730046f41f14 (from https://pypi.org/simple/babel/), version: 2.5.3
    Found link https://files.pythonhosted.org/packages/b8/ad/c6f60602d3ee3d92fbed87675b6fb6a6f9a38c223343ababdb44ba201f10/Babel-2.6.0-py2.py3-none-any.whl#sha256=6778d85147d5d85345c14a26aada5e478ab04e39b078b0745ee6870c2b5cf669 (from https://pypi.org/simple/babel/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*), version: 2.6.0
    Found link https://files.pythonhosted.org/packages/be/cc/9c981b249a455fa0c76338966325fc70b7265521bad641bf2932f77712f4/Babel-2.6.0.tar.gz#sha256=8cba50f48c529ca3fa18cf81fa9403be176d374ac4d60738b839122dfaaa3d23 (from https://pypi.org/simple/babel/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*), version: 2.6.0
    Using version 2.5.3 (newest of versions: 2.5.3)
    Created temporary directory: /tmp/pip-unpack-vjbz9ysn
    Looking up "https://files.pythonhosted.org/packages/94/03/14e68ad12e771a79cf96792f7158d68a7b3d8c7b2badf39e9ef1f65b57d6/Babel-2.5.3-py2.py3-none-any.whl" in the cache
    No cache entry available
    Starting new HTTPS connection (1): files.pythonhosted.org:443
    https://files.pythonhosted.org:443 "GET /packages/94/03/14e68ad12e771a79cf96792f7158d68a7b3d8c7b2badf39e9ef1f65b57d6/Babel-2.5.3-py2.py3-none-any.whl HTTP/1.1" 200 6774418
    Downloading https://files.pythonhosted.org/packages/94/03/14e68ad12e771a79cf96792f7158d68a7b3d8c7b2badf39e9ef1f65b57d6/Babel-2.5.3-py2.py3-none-any.whl (6.8MB)
    Downloading from URL https://files.pythonhosted.org/packages/94/03/14e68ad12e771a79cf96792f7158d68a7b3d8c7b2badf39e9ef1f65b57d6/Babel-2.5.3-py2.py3-none-any.whl#sha256=ad209a68d7162c4cff4b29cdebe3dec4cef75492df501b0049a9433c96ce6f80 (from https://pypi.org/simple/babel/)
    Ignoring unknown cache-control directive: immutable
    Updating cache with response from "https://files.pythonhosted.org/packages/94/03/14e68ad12e771a79cf96792f7158d68a7b3d8c7b2badf39e9ef1f65b57d6/Babel-2.5.3-py2.py3-none-any.whl"
    Caching due to etag
    Added babel==2.5.3 from https://files.pythonhosted.org/packages/94/03/14e68ad12e771a79cf96792f7158d68a7b3d8c7b2badf39e9ef1f65b57d6/Babel-2.5.3-py2.py3-none-any.whl#sha256=ad209a68d7162c4cff4b29cdebe3dec4cef75492df501b0049a9433c96ce6f80 (from -r /tmp/pipenv-pybqh90l-requirements/pipenv-770l6ctv-requirement.txt (line 1)) to build tracker '/tmp/pip-req-tracker-s8sdghjg'
    Removed babel==2.5.3 from https://files.pythonhosted.org/packages/94/03/14e68ad12e771a79cf96792f7158d68a7b3d8c7b2badf39e9ef1f65b57d6/Babel-2.5.3-py2.py3-none-any.whl#sha256=ad209a68d7162c4cff4b29cdebe3dec4cef75492df501b0049a9433c96ce6f80 (from -r /tmp/pipenv-pybqh90l-requirements/pipenv-770l6ctv-requirement.txt (line 1)) from build tracker '/tmp/pip-req-tracker-s8sdghjg'
    Installing collected packages: babel

    changing mode of /usr/local/bin/pybabel to 755
    Successfully installed babel-2.5.3
    Cleaning up...
    Removed build tracker '/tmp/pip-req-tracker-s8sdghjg'
    Removing intermediate container def6d4d2ac5e

If I log in to the container and manually run pipenv install --system the missing dependencies are added. Why is this?

$ pipenv --support
Pipenv version: '2018.11.26'
Pipenv location: '/usr/local/lib/python3.7/site-packages/pipenv'
Python location: '/usr/local/bin/python'
Python installations found:

3.7.1: /usr/local/bin/python
3.7.1: /usr/local/bin/python3.7m

PEP 508 Information:
{'implementation_name': 'cpython',
 'implementation_version': '3.7.1',
 'os_name': 'posix',
 'platform_machine': 'x86_64',
 'platform_python_implementation': 'CPython',
 'platform_release': '4.9.93-linuxkit-aufs',
 'platform_system': 'Linux',
 'platform_version': '#1 SMP Wed Jun 6 16:55:56 UTC 2018',
 'python_full_version': '3.7.1',
 'python_version': '3.7',
 'sys_platform': 'linux'}

System environment variables:

FLASK_APP
LANG
HOSTNAME
GPG_KEY
LORE_VERSION
PWD
HOME
PIPENV_YES
PIPENV_NOSPIN
TERM
PYTHON_VERSION
SHLVL
PATH
PIPENV_COLORBLIND
PYTHON_PIP_VERSION
OLDPWD
_
PIP_DISABLE_PIP_VERSION_CHECK
PYTHONDONTWRITEBYTECODE
PIP_SHIMS_BASE_MODULE
PIP_PYTHON_PATH
PYTHONFINDER_IGNORE_UNSUPPORTED

Pipenv–specific environment variables:

PIPENV_YES: 1
PIPENV_NOSPIN: 1
PIPENV_COLORBLIND: 1

Debug–specific environment variables:

PATH: /usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
LANG: C.UTF-8
PWD: /usr/src/app

Contents of Pipfile ('/usr/src/app/Pipfile'):
[[source]]

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

[packages]

babel = "==2.5.3"
flask-babel = "==0.11.2"
flask-debugtoolbar = "==0.10.1"
flask-mongoengine = "==0.9.2"
flask-wtf = {git = "https://github.com/lepture/flask-wtf.git"}
flask = "==0.12.2"
flask-classy = {git = "https://github.com/ripperdoc/flask-classy"}
gunicorn = "==19.7.1"
ipaddress = "==1.0.17"
"jinja2" = "==2.10"
markdown = "==2.6.11"
py-gfm = "==0.1.3"
mongoengine = "==0.15.0"
pillow = "==5.3.0"
pymongo = "==3.6.1"
python-dateutil = "==2.6.1"
python-magic = "==0.4.13"
python-slugify = "==1.2.4"
ptvsd = "==3.0.0"
pyqrcode = "==1.2.1"
"rfc6266" = "*"
rollbar = "==0.13.18"
sparkpost = "==1.3.5"
speaklater = "==1.3"
stripe = "==1.48.1"
wtforms = "==2.1"
future = "*"

[dev-packages]

pylint = "*"
pylint-django = "*"

[requires]

python_version = "3.7"

Contents of Pipfile.lock ('/usr/src/app/Pipfile.lock'):
{
    "_meta": {
        "hash": {
            "sha256": "74825fae7ac4670fce26de75826f035858890769ad8b9dcbc51263b0473e6a66"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.7"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.python.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "babel": {
            "hashes": [
                "sha256:8ce4cb6fdd4393edd323227cba3a077bceb2a6ce5201c902c65e730046f41f14",
                "sha256:ad209a68d7162c4cff4b29cdebe3dec4cef75492df501b0049a9433c96ce6f80"
            ],
            "index": "pypi",
            "version": "==2.5.3"
        },
        "blinker": {
            "hashes": [
                "sha256:471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6"
            ],
            "version": "==1.4"
        },
        "certifi": {
            "hashes": [
                "sha256:993f830721089fef441cdfeb4b2c8c9df86f0c63239f06bd025a76a7daddb033"
            ],
            "version": "==2018.11.29"
        },
        "chardet": {
            "hashes": [
                "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
                "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
            ],
            "version": "==3.0.4"
        },
        "click": {
            "hashes": [
                "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13",
                "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"
            ],
            "version": "==7.0"
        },
        "flask": {
            "hashes": [
                "sha256:0749df235e3ff61ac108f69ac178c9770caeaccad2509cb762ce1f65570a8856",
                "sha256:49f44461237b69ecd901cc7ce66feea0319b9158743dd27a2899962ab214dac1"
            ],
            "index": "pypi",
            "version": "==0.12.2"
        },
        "flask-babel": {
            "hashes": [
                "sha256:462a3c599b0ccf426ca1757cc612f1db383844efd346d14170da04c8c76dd521",
                "sha256:c0d75710bd4b0fe866f9f2347de6e19208712f9cec006436b4c1c15d4cb0c939"
            ],
            "index": "pypi",
            "version": "==0.11.2"
        },
        "flask-classy": {
            "git": "https://github.com/ripperdoc/flask-classy",
            "ref": "cbd1f8381a46dd6dc59b1dc54193cf0331927cca"
        },
        "flask-debugtoolbar": {
            "hashes": [
                "sha256:3d9657bc0c3633ace429e3ff451742bb59d1b7a7b95c9eb23a65ac9be2812959",
                "sha256:ec810083123aae0632eb32ba11e1cb4cdace81e7ce6c5009dd06c5204afbce52"
            ],
            "index": "pypi",
            "version": "==0.10.1"
        },
        "flask-mongoengine": {
            "hashes": [
                "sha256:9db3bd00c72537cd3fe59e0a4af53134388698f5b2ba4e7ec3090745423a9e74",
                "sha256:fc0d7f146f6947fb34fe3ca0dc60cac331bef143d8b54079cb35bab97f631da4"
            ],
            "index": "pypi",
            "version": "==0.9.2"
        },
        "flask-wtf": {
            "git": "https://github.com/lepture/flask-wtf.git",
            "ref": "9b029c379cfda2a7463cf771f933a1c425b4ce16"
        },
        "future": {
            "hashes": [
                "sha256:67045236dcfd6816dc439556d009594abf643e5eb48992e36beac09c2ca659b8"
            ],
            "index": "pypi",
            "version": "==0.17.1"
        },
        "gunicorn": {
            "hashes": [
                "sha256:75af03c99389535f218cc596c7de74df4763803f7b63eb09d77e92b3956b36c6",
                "sha256:eee1169f0ca667be05db3351a0960765620dad53f53434262ff8901b68a1b622"
            ],
            "index": "pypi",
            "version": "==19.7.1"
        },
        "idna": {
            "hashes": [
                "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e",
                "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16"
            ],
            "version": "==2.7"
        },
        "ipaddress": {
            "hashes": [
                "sha256:3a21c5a15f433710aaa26f1ae174b615973a25182006ae7f9c26de151cd51716",
                "sha256:a42764805223838ec9d04eee7fe699083bf5321001792b6076322784c5b994a5"
            ],
            "index": "pypi",
            "version": "==1.0.17"
        },
        "itsdangerous": {
            "hashes": [
                "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19",
                "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"
            ],
            "version": "==1.1.0"
        },
        "jinja2": {
            "hashes": [
                "sha256:74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd",
                "sha256:f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4"
            ],
            "index": "pypi",
            "version": "==2.10"
        },
        "lepl": {
            "hashes": [
                "sha256:a8715c709308350ce4afed5d525682656886d38141387ec87d44421da8d41397",
                "sha256:da6dfa01bbd449f8544857b13474ad52fcca30a5d30de96271c70f34c7a3f96e"
            ],
            "version": "==5.1.3"
        },
        "markdown": {
            "hashes": [
                "sha256:9ba587db9daee7ec761cfc656272be6aabe2ed300fece21208e4aab2e457bc8f",
                "sha256:a856869c7ff079ad84a3e19cd87a64998350c2b94e9e08e44270faef33400f81"
            ],
            "index": "pypi",
            "version": "==2.6.11"
        },
        "markupsafe": {
            "hashes": [
                "sha256:048ef924c1623740e70204aa7143ec592504045ae4429b59c30054cb31e3c432",
                "sha256:130f844e7f5bdd8e9f3f42e7102ef1d49b2e6fdf0d7526df3f87281a532d8c8b",
                "sha256:19f637c2ac5ae9da8bfd98cef74d64b7e1bb8a63038a3505cd182c3fac5eb4d9",
                "sha256:1b8a7a87ad1b92bd887568ce54b23565f3fd7018c4180136e1cf412b405a47af",
                "sha256:1c25694ca680b6919de53a4bb3bdd0602beafc63ff001fea2f2fc16ec3a11834",
                "sha256:1f19ef5d3908110e1e891deefb5586aae1b49a7440db952454b4e281b41620cd",
                "sha256:1fa6058938190ebe8290e5cae6c351e14e7bb44505c4a7624555ce57fbbeba0d",
                "sha256:31cbb1359e8c25f9f48e156e59e2eaad51cd5242c05ed18a8de6dbe85184e4b7",
                "sha256:3e835d8841ae7863f64e40e19477f7eb398674da6a47f09871673742531e6f4b",
                "sha256:4e97332c9ce444b0c2c38dd22ddc61c743eb208d916e4265a2a3b575bdccb1d3",
                "sha256:525396ee324ee2da82919f2ee9c9e73b012f23e7640131dd1b53a90206a0f09c",
                "sha256:52b07fbc32032c21ad4ab060fec137b76eb804c4b9a1c7c7dc562549306afad2",
                "sha256:52ccb45e77a1085ec5461cde794e1aa037df79f473cbc69b974e73940655c8d7",
                "sha256:5c3fbebd7de20ce93103cb3183b47671f2885307df4a17a0ad56a1dd51273d36",
                "sha256:5e5851969aea17660e55f6a3be00037a25b96a9b44d2083651812c99d53b14d1",
                "sha256:5edfa27b2d3eefa2210fb2f5d539fbed81722b49f083b2c6566455eb7422fd7e",
                "sha256:7d263e5770efddf465a9e31b78362d84d015cc894ca2c131901a4445eaa61ee1",
                "sha256:83381342bfc22b3c8c06f2dd93a505413888694302de25add756254beee8449c",
                "sha256:857eebb2c1dc60e4219ec8e98dfa19553dae33608237e107db9c6078b1167856",
                "sha256:98e439297f78fca3a6169fd330fbe88d78b3bb72f967ad9961bcac0d7fdd1550",
                "sha256:bf54103892a83c64db58125b3f2a43df6d2cb2d28889f14c78519394feb41492",
                "sha256:d9ac82be533394d341b41d78aca7ed0e0f4ba5a2231602e2f05aa87f25c51672",
                "sha256:e982fe07ede9fada6ff6705af70514a52beb1b2c3d25d4e873e82114cf3c5401",
                "sha256:edce2ea7f3dfc981c4ddc97add8a61381d9642dc3273737e756517cc03e84dd6",
                "sha256:efdc45ef1afc238db84cb4963aa689c0408912a0239b0721cb172b4016eb31d6",
                "sha256:f137c02498f8b935892d5c0172560d7ab54bc45039de8805075e19079c639a9c",
                "sha256:f82e347a72f955b7017a39708a3667f106e6ad4d10b25f237396a7115d8ed5fd",
                "sha256:fb7c206e01ad85ce57feeaaa0bf784b97fa3cad0d4a5737bc5295785f5c613a1"
            ],
            "version": "==1.1.0"
        },
        "mongoengine": {
            "hashes": [
                "sha256:996e0aba34e0be3834cba19a2ac77aaeebbd7b595b6b896266a2aa41cad3566e",
                "sha256:f8fed3871dfcefd421d3a3be1b43b3b9a1622db6a4271d78f15f494e51003f75"
            ],
            "index": "pypi",
            "version": "==0.15.0"
        },
        "pillow": {
            "hashes": [
                "sha256:00203f406818c3f45d47bb8fe7e67d3feddb8dcbbd45a289a1de7dd789226360",
                "sha256:0616f800f348664e694dddb0b0c88d26761dd5e9f34e1ed7b7a7d2da14b40cb7",
                "sha256:1f7908aab90c92ad85af9d2fec5fc79456a89b3adcc26314d2cde0e238bd789e",
                "sha256:2ea3517cd5779843de8a759c2349a3cd8d3893e03ab47053b66d5ec6f8bc4f93",
                "sha256:48a9f0538c91fc136b3a576bee0e7cd174773dc9920b310c21dcb5519722e82c",
                "sha256:5280ebc42641a1283b7b1f2c20e5b936692198b9dd9995527c18b794850be1a8",
                "sha256:5e34e4b5764af65551647f5cc67cf5198c1d05621781d5173b342e5e55bf023b",
                "sha256:63b120421ab85cad909792583f83b6ca3584610c2fe70751e23f606a3c2e87f0",
                "sha256:696b5e0109fe368d0057f484e2e91717b49a03f1e310f857f133a4acec9f91dd",
                "sha256:870ed021a42b1b02b5fe4a739ea735f671a84128c0a666c705db2cb9abd528eb",
                "sha256:916da1c19e4012d06a372127d7140dae894806fad67ef44330e5600d77833581",
                "sha256:9303a289fa0811e1c6abd9ddebfc770556d7c3311cb2b32eff72164ddc49bc64",
                "sha256:9577888ecc0ad7d06c3746afaba339c94d62b59da16f7a5d1cff9e491f23dace",
                "sha256:987e1c94a33c93d9b209315bfda9faa54b8edfce6438a1e93ae866ba20de5956",
                "sha256:99a3bbdbb844f4fb5d6dd59fac836a40749781c1fa63c563bc216c27aef63f60",
                "sha256:99db8dc3097ceafbcff9cb2bff384b974795edeb11d167d391a02c7bfeeb6e16",
                "sha256:a5a96cf49eb580756a44ecf12949e52f211e20bffbf5a95760ac14b1e499cd37",
                "sha256:aa6ca3eb56704cdc0d876fc6047ffd5ee960caad52452fbee0f99908a141a0ae",
                "sha256:aade5e66795c94e4a2b2624affeea8979648d1b0ae3fcee17e74e2c647fc4a8a",
                "sha256:b78905860336c1d292409e3df6ad39cc1f1c7f0964e66844bbc2ebfca434d073",
                "sha256:b92f521cdc4e4a3041cc343625b699f20b0b5f976793fb45681aac1efda565f8",
                "sha256:bfde84bbd6ae5f782206d454b67b7ee8f7f818c29b99fd02bf022fd33bab14cb",
                "sha256:c2b62d3df80e694c0e4a0ed47754c9480521e25642251b3ab1dff050a4e60409",
                "sha256:c5e2be6c263b64f6f7656e23e18a4a9980cffc671442795682e8c4e4f815dd9f",
                "sha256:c99aa3c63104e0818ec566f8ff3942fb7c7a8f35f9912cb63fd8e12318b214b2",
                "sha256:dae06620d3978da346375ebf88b9e2dd7d151335ba668c995aea9ed07af7add4",
                "sha256:db5499d0710823fa4fb88206050d46544e8f0e0136a9a5f5570b026584c8fd74",
                "sha256:f36baafd82119c4a114b9518202f2a983819101dcc14b26e43fc12cbefdce00e",
                "sha256:f52b79c8796d81391ab295b04e520bda6feed54d54931708872e8f9ae9db0ea1",
                "sha256:ff8cff01582fa1a7e533cb97f628531c4014af4b5f38e33cdcfe5eec29b6d888"
            ],
            "index": "pypi",
            "version": "==5.3.0"
        },
        "ptvsd": {
            "hashes": [
                "sha256:44fe6af915711b5f144d5344fa24b524d6b19cb0dbd784e177e3e65935d458dc"
            ],
            "index": "pypi",
            "version": "==3.0.0"
        },
        "py-gfm": {
            "hashes": [
                "sha256:721f6d7ad340c78c0e6fab37f25a7f8e09757890b210ce79c87612133ec57788",
                "sha256:f107e43248eba6236b19ceda78531f40c7bdb85ba4a219f478c92920397f4f98"
            ],
            "index": "pypi",
            "version": "==0.1.3"
        },
        "pymongo": {
            "hashes": [
                "sha256:061085dfe4fbf1d9d6ed2f2e52fe6ab72559e48b4294370b433751638160d10b",
                "sha256:07fdee1c5567f237796a8550233e04853785d8dcf95929f96ab519ed91543109",
                "sha256:0d98731aaea8cb32b535c376f6785927e4e3d9459ffe1440b8a639827a849350",
                "sha256:10f683950f70626ccedf4a662d1c0b3244e8e013c2067872af5633830abd1bfd",
                "sha256:2954b99cfeb76776879e9f8a4cae9c5e19d5eff92d0b7b663ceddcf192adb66b",
                "sha256:419ed5d5b76ef304815f354d9df7f2085acfd6ff7cc1b714ca702e2239b341c2",
                "sha256:42ec201fd9a26e7c1e611e3db19324dead51dd4646391492eb238b41749340e8",
                "sha256:4400fa92af310bf66b76c313c7ded3bb63f3d63b4f43c3bfbff552cf294dc9fa",
                "sha256:4807dfbb5cdcfe0224329992dc48b897c780d0ad7553c3799d34f84ba5cab446",
                "sha256:54daf67e1e7e7e5a5160c86123bdd39b1d3b25876c2ab38230dc2a764cb3d98f",
                "sha256:5fd6ce5ed3c6c92d2c94756e6bf041304e5c7c5a5dbea31b8957d52a78bdf01d",
                "sha256:601e00fe7fb283f04c95f5dafb787c0862f48ca015a6f1f81b460c74e4303873",
                "sha256:7fbd9233e8b6741b047c5857e2ad5efb74091f167d7fa8a2a3379217165058f9",
                "sha256:7ffac35362c07c103b024b89875e8d7f0625129b65c56fa8a3ecebbd56110405",
                "sha256:833bc6cb2ec7058dea9f5840a9314ac74738d2117486a044e88f3976e37ea7a0",
                "sha256:92cb26a2a9b38e8df5215803f950b20a6c847d5e00d1dd125eaa84f05f9472d7",
                "sha256:9e5f0e8967d95a256038817460844a8aab588b9bc9ba6296507a1863960a0e44",
                "sha256:abf83b908e535b1386a7732825994e6e36eff6394c1829f3e7a23888136484fa",
                "sha256:adb2dba52c8a2a2d7bcd3b267f7bbf7c822850cf6a7cd15211b9f386c3a670ef",
                "sha256:ae7b3479822a03f6f651913de84ba67101f23e051ae88034085e974f472dcfff",
                "sha256:cc15b30f0ac518e6cbd4b6e6e6162f8aa14edfe255d0841146f146151bd58865",
                "sha256:d23498d62063b715078947bef48fa4d34dc354f3b268ed15dc6b46fc809a88e9",
                "sha256:dd29bb5bc9068ccc248c8c145efd839421f04363b468b47cfa2d4902ca369afe",
                "sha256:e53ad0cc6c489f83e7f6bb6121aa73bb6f6488410024a3bd77c16af1aa3a1000",
                "sha256:ecb11113407d919f8714cc7d0841985044633d0b561ef3d797e1b494a3e73537",
                "sha256:ece2c2add66d3ec2720a963bf073ca11fc3b0b58159767fc3bc5ddaad791d481",
                "sha256:ef25c8675f5c8c19832f69cd97d728d99bb4ab9c3b200e28a5c8416631afaf3c",
                "sha256:f62a818d643776873713c5676f17bd95ac4176220b13dd12c14edd3a450d1ac9",
                "sha256:f7ebcb846962ee40374db2d9014a89bea9c983ae63c1877957c3a0a756974796"
            ],
            "index": "pypi",
            "version": "==3.6.1"
        },
        "pyqrcode": {
            "hashes": [
                "sha256:1b2812775fa6ff5c527977c4cd2ccb07051ca7d0bc0aecf937a43864abe5eff6",
                "sha256:fdbf7634733e56b72e27f9bce46e4550b75a3a2c420414035cae9d9d26b234d5"
            ],
            "index": "pypi",
            "version": "==1.2.1"
        },
        "python-dateutil": {
            "hashes": [
                "sha256:891c38b2a02f5bb1be3e4793866c8df49c7d19baabf9c1bad62547e0b4866aca",
                "sha256:95511bae634d69bc7329ba55e646499a842bc4ec342ad54a8cdb65645a0aad3c"
            ],
            "index": "pypi",
            "version": "==2.6.1"
        },
        "python-magic": {
            "hashes": [
                "sha256:604eace6f665809bebbb07070508dfa8cabb2d7cb05be9a56706c60f864f1289",
                "sha256:a1ec69e76cc513b1af164c02982607f96ff3bb668162a688f2b1bb5f6a5fe05d"
            ],
            "index": "pypi",
            "version": "==0.4.13"
        },
        "python-slugify": {
            "hashes": [
                "sha256:57a385df7a1c6dbd15f7666eaff0ff29d3f60363b228b1197c5308ed3ba5f824",
                "sha256:c3733135d3b184196fdb8844f6a74bbfb9cf6720d1dcce3254bdc434353f938f"
            ],
            "index": "pypi",
            "version": "==1.2.4"
        },
        "pytz": {
            "hashes": [
                "sha256:31cb35c89bd7d333cd32c5f278fca91b523b0834369e757f4c5641ea252236ca",
                "sha256:8e0f8568c118d3077b46be7d654cc8167fa916092e28320cde048e54bfc9f1e6"
            ],
            "version": "==2018.7"
        },
        "requests": {
            "hashes": [
                "sha256:65b3a120e4329e33c9889db89c80976c5272f56ea92d3e74da8a463992e3ff54",
                "sha256:ea881206e59f41dbd0bd445437d792e43906703fff75ca8ff43ccdb11f33f263"
            ],
            "version": "==2.20.1"
        },
        "rfc6266": {
            "hashes": [
                "sha256:923116bd77cf283b161a813139f5022e894e91d040686208aa33eb43db1b7703"
            ],
            "index": "pypi",
            "version": "==0.0.4"
        },
        "rollbar": {
            "hashes": [
                "sha256:f834ea7ea13a8b52306eb091eb74c52ea00744936fb9fc83a2c54477a44461ed"
            ],
            "index": "pypi",
            "version": "==0.13.18"
        },
        "six": {
            "hashes": [
                "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
                "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
            ],
            "version": "==1.12.0"
        },
        "sparkpost": {
            "hashes": [
                "sha256:763fa373e69448d7e14936a7c8197f147803512ca00e7ce8cdb2ac1e3ed91bb0",
                "sha256:aa24ab26b7cd4ebaa929bfa9b0d2cd256470b6da84f2c0f5fd0a16bd4c49ebd1"
            ],
            "index": "pypi",
            "version": "==1.3.5"
        },
        "speaklater": {
            "hashes": [
                "sha256:59fea336d0eed38c1f0bf3181ee1222d0ef45f3a9dd34ebe65e6bfffdd6a65a9"
            ],
            "index": "pypi",
            "version": "==1.3"
        },
        "stripe": {
            "hashes": [
                "sha256:28572805d2ac1ca9e866164f7d06397114965c7a01033511c36ea15467e6b76f",
                "sha256:c40bd1e16f79636febd5d0ace6b8f9e804999ce11aff5c2fd4e977a68716566e",
                "sha256:e918b5117fec5d847793ee8f2d43d1ed26697bee97f6dc1117b651f47c915465"
            ],
            "index": "pypi",
            "version": "==1.48.1"
        },
        "unidecode": {
            "hashes": [
                "sha256:092cdf7ad9d1052c50313426a625b717dab52f7ac58f859e09ea020953b1ad8f",
                "sha256:8b85354be8fd0c0e10adbf0675f6dc2310e56fda43fa8fe049123b6c475e52fb"
            ],
            "version": "==1.0.23"
        },
        "urllib3": {
            "hashes": [
                "sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39",
                "sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22"
            ],
            "version": "==1.24.1"
        },
        "werkzeug": {
            "hashes": [
                "sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c",
                "sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b"
            ],
            "version": "==0.14.1"
        },
        "wtforms": {
            "hashes": [
                "sha256:ffdf10bd1fa565b8233380cb77a304cd36fd55c73023e91d4b803c96bc11d46f"
            ],
            "index": "pypi",
            "version": "==2.1"
        }
    },
    "develop": {
        "astroid": {
            "hashes": [
                "sha256:35b032003d6a863f5dcd7ec11abd5cd5893428beaa31ab164982403bcb311f22",
                "sha256:6a5d668d7dc69110de01cdf7aeec69a679ef486862a0850cc0fd5571505b6b7e"
            ],
            "version": "==2.1.0"
        },
        "isort": {
            "hashes": [
                "sha256:1153601da39a25b14ddc54955dbbacbb6b2d19135386699e2ad58517953b34af",
                "sha256:b9c40e9750f3d77e6e4d441d8b0266cf555e7cdabdcff33c4fd06366ca761ef8",
                "sha256:ec9ef8f4a9bc6f71eec99e1806bfa2de401650d996c59330782b89a5555c1497"
            ],
            "version": "==4.3.4"
        },
        "lazy-object-proxy": {
            "hashes": [
                "sha256:0ce34342b419bd8f018e6666bfef729aec3edf62345a53b537a4dcc115746a33",
                "sha256:1b668120716eb7ee21d8a38815e5eb3bb8211117d9a90b0f8e21722c0758cc39",
                "sha256:209615b0fe4624d79e50220ce3310ca1a9445fd8e6d3572a896e7f9146bbf019",
                "sha256:27bf62cb2b1a2068d443ff7097ee33393f8483b570b475db8ebf7e1cba64f088",
                "sha256:27ea6fd1c02dcc78172a82fc37fcc0992a94e4cecf53cb6d73f11749825bd98b",
                "sha256:2c1b21b44ac9beb0fc848d3993924147ba45c4ebc24be19825e57aabbe74a99e",
                "sha256:2df72ab12046a3496a92476020a1a0abf78b2a7db9ff4dc2036b8dd980203ae6",
                "sha256:320ffd3de9699d3892048baee45ebfbbf9388a7d65d832d7e580243ade426d2b",
                "sha256:50e3b9a464d5d08cc5227413db0d1c4707b6172e4d4d915c1c70e4de0bbff1f5",
                "sha256:5276db7ff62bb7b52f77f1f51ed58850e315154249aceb42e7f4c611f0f847ff",
                "sha256:61a6cf00dcb1a7f0c773ed4acc509cb636af2d6337a08f362413c76b2b47a8dd",
                "sha256:6ae6c4cb59f199d8827c5a07546b2ab7e85d262acaccaacd49b62f53f7c456f7",
                "sha256:7661d401d60d8bf15bb5da39e4dd72f5d764c5aff5a86ef52a042506e3e970ff",
                "sha256:7bd527f36a605c914efca5d3d014170b2cb184723e423d26b1fb2fd9108e264d",
                "sha256:7cb54db3535c8686ea12e9535eb087d32421184eacc6939ef15ef50f83a5e7e2",
                "sha256:7f3a2d740291f7f2c111d86a1c4851b70fb000a6c8883a59660d95ad57b9df35",
                "sha256:81304b7d8e9c824d058087dcb89144842c8e0dea6d281c031f59f0acf66963d4",
                "sha256:933947e8b4fbe617a51528b09851685138b49d511af0b6c0da2539115d6d4514",
                "sha256:94223d7f060301b3a8c09c9b3bc3294b56b2188e7d8179c762a1cda72c979252",
                "sha256:ab3ca49afcb47058393b0122428358d2fbe0408cf99f1b58b295cfeb4ed39109",
                "sha256:bd6292f565ca46dee4e737ebcc20742e3b5be2b01556dafe169f6c65d088875f",
                "sha256:cb924aa3e4a3fb644d0c463cad5bc2572649a6a3f68a7f8e4fbe44aaa6d77e4c",
                "sha256:d0fc7a286feac9077ec52a927fc9fe8fe2fabab95426722be4c953c9a8bede92",
                "sha256:ddc34786490a6e4ec0a855d401034cbd1242ef186c20d79d2166d6a4bd449577",
                "sha256:e34b155e36fa9da7e1b7c738ed7767fc9491a62ec6af70fe9da4a057759edc2d",
                "sha256:e5b9e8f6bda48460b7b143c3821b21b452cb3a835e6bbd5dd33aa0c8d3f5137d",
                "sha256:e81ebf6c5ee9684be8f2c87563880f93eedd56dd2b6146d8a725b50b7e5adb0f",
                "sha256:eb91be369f945f10d3a49f5f9be8b3d0b93a4c2be8f8a5b83b0571b8123e0a7a",
                "sha256:f460d1ceb0e4a5dcb2a652db0904224f367c9b3c1470d5a7683c0480e582468b"
            ],
            "version": "==1.3.1"
        },
        "mccabe": {
            "hashes": [
                "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42",
                "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
            ],
            "version": "==0.6.1"
        },
        "pylint": {
            "hashes": [
                "sha256:689de29ae747642ab230c6d37be2b969bf75663176658851f456619aacf27492",
                "sha256:771467c434d0d9f081741fec1d64dfb011ed26e65e12a28fe06ca2f61c4d556c"
            ],
            "index": "pypi",
            "version": "==2.2.2"
        },
        "pylint-django": {
            "hashes": [
                "sha256:f2899a0f33c9bede0c9912ade9a57bbfc4b400b4912c59bea055353f9d2ff56f"
            ],
            "index": "pypi",
            "version": "==2.0.4"
        },
        "pylint-plugin-utils": {
            "hashes": [
                "sha256:8ad25a82bcce390d1d6b7c006c123e0cb18051839c9df7b8bdb7823c53fe676e"
            ],
            "version": "==0.4"
        },
        "six": {
            "hashes": [
                "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
                "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
            ],
            "version": "==1.12.0"
        },
        "wrapt": {
            "hashes": [
                "sha256:d4d560d479f2c21e1b5443bbd15fe7ec4b37fe7e53d335d3b9b0a7b1226fe3c6"
            ],
            "version": "==1.10.11"
        }
    }
}

When I install locally, but on same network, I tend to get these errors:
An error occurred while installing flask-mongoengine==0.9.2 --hash=sha256:9db3bd00c72537cd3fe59e0a4af53134388698f5b2ba4e7ec3090745423a9e74 --hash=sha256:fc0d7f146f6947fb34fe3ca0dc60cac331bef143d8b54079cb35bab97f631da4! Will try again.
An error occurred while installing mongoengine==0.15.0 --hash=sha256:996e0aba34e0be3834cba19a2ac77aaeebbd7b595b6b896266a2aa41cad3566e --hash=sha256:f8fed3871dfcefd421d3a3be1b43b3b9a1622db6a4271d78f15f494e51003f75! Will try again.
An error occurred while installing py-gfm==0.1.3 --hash=sha256:721f6d7ad340c78c0e6fab37f25a7f8e09757890b210ce79c87612133ec57788 --hash=sha256:f107e43248eba6236b19ceda78531f40c7bdb85ba4a219f478c92920397f4f98! Will try again.
An error occurred while installing python-dateutil==2.6.1 --hash=sha256:891c38b2a02f5bb1be3e4793866c8df49c7d19baabf9c1bad62547e0b4866aca --hash=sha256:95511bae634d69bc7329ba55e646499a842bc4ec342ad54a8cdb65645a0aad3c! Will try again.
An error occurred while installing python-slugify==1.2.4 --hash=sha256:57a385df7a1c6dbd15f7666eaff0ff29d3f60363b228b1197c5308ed3ba5f824 --hash=sha256:c3733135d3b184196fdb8844f6a74bbfb9cf6720d1dcce3254bdc434353f938f! Will try again.
An error occurred while installing requests==2.20.1 --hash=sha256:65b3a120e4329e33c9889db89c80976c5272f56ea92d3e74da8a463992e3ff54 --hash=sha256:ea881206e59f41dbd0bd445437d792e43906703fff75ca8ff43ccdb11f33f263! Will try again.
An error occurred while installing rfc6266==0.0.4 --hash=sha256:923116bd77cf283b161a813139f5022e894e91d040686208aa33eb43db1b7703! Will try again.
🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 41/41 — 00:00:23
An error occurred while installing rollbar==0.13.18 --hash=sha256:f834ea7ea13a8b52306eb091eb74c52ea00744936fb9fc83a2c54477a44461ed! Will try again.
An error occurred while installing sparkpost==1.3.5 --hash=sha256:763fa373e69448d7e14936a7c8197f147803512ca00e7ce8cdb2ac1e3ed91bb0 --hash=sha256:aa24ab26b7cd4ebaa929bfa9b0d2cd256470b6da84f2c0f5fd0a16bd4c49ebd1! Will try again.
An error occurred while installing stripe==1.48.1 --hash=sha256:28572805d2ac1ca9e866164f7d06397114965c7a01033511c36ea15467e6b76f --hash=sha256:c40bd1e16f79636febd5d0ace6b8f9e804999ce11aff5c2fd4e977a68716566e --hash=sha256:e918b5117fec5d847793ee8f2d43d1ed26697bee97f6dc1117b651f47c915465! Will try again.
Those seem to be installed when pipenv tries again at the end of the command. But this is not shown on the docker build output, and seems to not have worked there.

You have source control dependencies that aren’t in editable mode so the dependencies won’t be resolved by pipenv for various reasons. I’m actually getting really tired of this bug since we can bypass the normal resolved completely during resolution on vcs dependencies, I’m just not sure if that’s a bugfix or a behavior change. /cc @uranusjr

Discovering intrinsic dependencies from VCS packages is indeed a more reasonable behaviour to me. I wonder if it’s possible to implement a no_deps flag in Pipfile so people dependning on the old behaviour can still make things work.

I'm committed to simply resolving this properly.  As of #3298 we will surface these dependencies and resolve them

authors: ripperdoc techalchemy uranusjr

repo: pypa/pipenv


text:
[FEATURE] Allow paths outiside of the source code for long_description

setuptools version
setuptools>=57.0.0
Python version
Python 3.9
OS
Arch Linux
Additional environment information
It happens when I try to use a README.md file outside the source folder.
Description
In the file setup.cfg, when I try to use the read me file ../README.md it is not working.
Error:
distutils.errors.DistutilsOptionError: `file:` directive can not access /home/wolf/workspace/projects/sniparinject/README.md

ERROR Backend subproccess exited when trying to invoke get_requires_for_build_sdist

The file exists, looks the parsing of the setup.cfg is not recognized in the paths outside the source code, for example ../README.md is not working but ./other_folder/README.md works.
I found this issue https://github.com/pypa/setuptools/issues/1635, which was related to my problem, but I am not agreed.
Expected behavior
Same as the setup.py, which recognize the paths outside the source code.
import setuptools

with open('../README.md', 'r', encoding="utf-8") as fh:
    long_description = fh.read()

setuptools.setup(
    long_description=long_description,
)

How to Reproduce
git clone --no-checkout https://github.com/airvzxf/sniparinject.git
cd sniparinject || exit 123
git checkout af2215e3661e06c2d2569949d9b19f6f549a90e8

./script/setup-dev.bash

# Display read me file.
ls -lha README.md

cd ./src || exit

# Display read me file.
ls -lha ../README.md

# Check if the setup cfg has the parameter: long_description = file: ../README.md
cat setup.cfg

rm -fR build dist ./*.egg-info
source ../venv/bin/activate
python3 -m pip install --upgrade pip build twine
python3 -m build

Output
/home/wolf/workspace/projects/sniparinject/script/pypi-build.bash

CURRENT_PATH=$(dirname "${0}")
cd "${CURRENT_PATH}" || exit

cd ../src || exit
rm -fR build dist ./*.egg-info
source ../venv/bin/activate
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly

deactivate () {
    # reset old environment variables
    if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
        PATH="${_OLD_VIRTUAL_PATH:-}"
        export PATH
        unset _OLD_VIRTUAL_PATH
    fi
    if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
        PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
        export PYTHONHOME
        unset _OLD_VIRTUAL_PYTHONHOME
    fi

    # This should detect bash and zsh, which have a hash command that must
    # be called to get it to forget past commands.  Without forgetting
    # past commands the $PATH changes we made may not be respected
    if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
        hash -r 2> /dev/null
    fi

    if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
        PS1="${_OLD_VIRTUAL_PS1:-}"
        export PS1
        unset _OLD_VIRTUAL_PS1
    fi

    unset VIRTUAL_ENV
    if [ ! "${1:-}" = "nondestructive" ] ; then
    # Self destruct!
        unset -f deactivate
    fi
}

# unset irrelevant variables
deactivate nondestructive

VIRTUAL_ENV="/home/wolf/workspace/projects/sniparinject/venv"
export VIRTUAL_ENV

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH

# unset PYTHONHOME if set
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
# could use `if (set -u; : $PYTHONHOME) ;` in bash
if [ -n "${PYTHONHOME:-}" ] ; then
    _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
    unset PYTHONHOME
fi

if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
    _OLD_VIRTUAL_PS1="${PS1:-}"
    PS1="(venv) ${PS1:-}"
    export PS1
fi

# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands.  Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
    hash -r 2> /dev/null
fi
python3 -m pip install --upgrade pip build twine
Requirement already satisfied: pip in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (21.1.2)
Requirement already satisfied: build in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (0.4.0)
Requirement already satisfied: twine in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (3.4.1)
Requirement already satisfied: pep517>=0.9.1 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from build) (0.10.0)
Requirement already satisfied: packaging>=19.0 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from build) (20.9)
Requirement already satisfied: toml>=0.10.0 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from build) (0.10.2)
Requirement already satisfied: pyparsing>=2.0.2 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from packaging>=19.0->build) (2.4.7)
Requirement already satisfied: colorama>=0.4.3 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from twine) (0.4.4)
Requirement already satisfied: requests-toolbelt!=0.9.0,>=0.8.0 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from twine) (0.9.1)
Requirement already satisfied: rfc3986>=1.4.0 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from twine) (1.5.0)
Requirement already satisfied: tqdm>=4.14 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from twine) (4.61.1)
Requirement already satisfied: pkginfo>=1.4.2 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from twine) (1.7.0)
Requirement already satisfied: readme-renderer>=21.0 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from twine) (29.0)
Requirement already satisfied: requests>=2.20 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from twine) (2.25.1)
Requirement already satisfied: keyring>=15.1 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from twine) (23.0.1)
Requirement already satisfied: importlib-metadata>=3.6 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from twine) (4.5.0)
Requirement already satisfied: zipp>=0.5 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from importlib-metadata>=3.6->twine) (3.4.1)
Requirement already satisfied: SecretStorage>=3.2 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from keyring>=15.1->twine) (3.3.1)
Requirement already satisfied: jeepney>=0.4.2 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from keyring>=15.1->twine) (0.6.0)
Requirement already satisfied: docutils>=0.13.1 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from readme-renderer>=21.0->twine) (0.17.1)
Requirement already satisfied: bleach>=2.1.0 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from readme-renderer>=21.0->twine) (3.3.0)
Requirement already satisfied: six in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from readme-renderer>=21.0->twine) (1.16.0)
Requirement already satisfied: Pygments>=2.5.1 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from readme-renderer>=21.0->twine) (2.9.0)
Requirement already satisfied: webencodings in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from bleach>=2.1.0->readme-renderer>=21.0->twine) (0.5.1)
Requirement already satisfied: certifi>=2017.4.17 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from requests>=2.20->twine) (2021.5.30)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from requests>=2.20->twine) (1.26.5)
Requirement already satisfied: chardet<5,>=3.0.2 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from requests>=2.20->twine) (4.0.0)
Requirement already satisfied: idna<3,>=2.5 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from requests>=2.20->twine) (2.10)
Requirement already satisfied: cryptography>=2.0 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from SecretStorage>=3.2->keyring>=15.1->twine) (3.4.7)
Requirement already satisfied: cffi>=1.12 in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from cryptography>=2.0->SecretStorage>=3.2->keyring>=15.1->twine) (1.14.5)
Requirement already satisfied: pycparser in /home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages (from cffi>=1.12->cryptography>=2.0->SecretStorage>=3.2->keyring>=15.1->twine) (2.20)
python3 -m build
Found existing installation: setuptools 56.0.0
Uninstalling setuptools-56.0.0:
  Successfully uninstalled setuptools-56.0.0
Collecting wheel>=0.36.2
  Using cached wheel-0.36.2-py2.py3-none-any.whl (35 kB)
Collecting pip>=21.1.2
  Using cached pip-21.1.2-py3-none-any.whl (1.5 MB)
Collecting setuptools>=57.0.0
  Using cached setuptools-57.0.0-py3-none-any.whl (821 kB)
Installing collected packages: wheel, setuptools, pip
  Attempting uninstall: pip
    Found existing installation: pip 21.1.1
    Uninstalling pip-21.1.1:
      Successfully uninstalled pip-21.1.1
Successfully installed pip-21.1.2 setuptools-57.0.0 wheel-0.36.2
Traceback (most recent call last):
  File "/home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages/pep517/in_process/_in_process.py", line 280, in <module>
    main()
  File "/home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages/pep517/in_process/_in_process.py", line 263, in main
    json_out['return_val'] = hook(**hook_input['kwargs'])
  File "/home/wolf/workspace/projects/sniparinject/venv/lib/python3.9/site-packages/pep517/in_process/_in_process.py", line 219, in get_requires_for_build_sdist
    return hook(config_settings)
  File "/tmp/build-env-kalupbcw/lib/python3.9/site-packages/setuptools/build_meta.py", line 159, in get_requires_for_build_sdist
    return self._get_build_requires(config_settings, requirements=[])
  File "/tmp/build-env-kalupbcw/lib/python3.9/site-packages/setuptools/build_meta.py", line 135, in _get_build_requires
    self.run_setup()
  File "/tmp/build-env-kalupbcw/lib/python3.9/site-packages/setuptools/build_meta.py", line 150, in run_setup
    exec(compile(code, __file__, 'exec'), locals())
  File "setup.py", line 1, in <module>
  File "/tmp/build-env-kalupbcw/lib/python3.9/site-packages/setuptools/__init__.py", line 153, in setup
    return distutils.core.setup(**attrs)
  File "/usr/lib/python3.9/distutils/core.py", line 121, in setup
    dist.parse_config_files()
  File "/tmp/build-env-kalupbcw/lib/python3.9/site-packages/setuptools/dist.py", line 772, in parse_config_files
    parse_configuration(self, self.command_options,
  File "/tmp/build-env-kalupbcw/lib/python3.9/site-packages/setuptools/config.py", line 157, in parse_configuration
    meta.parse()
  File "/tmp/build-env-kalupbcw/lib/python3.9/site-packages/setuptools/config.py", line 463, in parse
    section_parser_method(section_options)
  File "/tmp/build-env-kalupbcw/lib/python3.9/site-packages/setuptools/config.py", line 436, in parse_section
    self[name] = value
  File "/tmp/build-env-kalupbcw/lib/python3.9/site-packages/setuptools/config.py", line 220, in __setitem__
    value = parser(value)
  File "/tmp/build-env-kalupbcw/lib/python3.9/site-packages/setuptools/config.py", line 330, in _parse_file
    return '\n'.join(
  File "/tmp/build-env-kalupbcw/lib/python3.9/site-packages/setuptools/config.py", line 333, in <genexpr>
    if (cls._assert_local(path) or True)
  File "/tmp/build-env-kalupbcw/lib/python3.9/site-packages/setuptools/config.py", line 340, in _assert_local
    raise DistutilsOptionError(
distutils.errors.DistutilsOptionError: `file:` directive can not access /home/wolf/workspace/projects/sniparinject/README.md

ERROR Backend subproccess exited when trying to invoke get_requires_for_build_sdist

Process finished with exit code 1

Code of Conduct

[X] I agree to follow the PSF Code of Conduct

As I mentioned in the related PR. This doesn't sound like a bug but rather is a security-related sandboxing feature.

Well, the first time it happen to me, I assumed that it was a defect, then investigating and check this logic was intentionally. Let's continue the discussion in the PR.

See the comments in the PR for more background on why this is not a good idea.

source: gharchive/issue

authors: airvzxf jaraco webknjaz

repo: pypa/setuptools

license: mit

license_type: permissive

license_source: bigquery


text:
[BUG] UnicodeDecodeError with unicode setup.py on windows with non english primary language

setuptools version
69.02
Python version
3.11
OS
Windows 11
Additional environment information
Package    Version
---------- -------
pip        23.3.1
setuptools 69.0.2
wheel      0.42.0

I installed Korean language feature on windows and set it primary additionally.
Description
I encountered this when using poetry install.
I suspect it's because uctools' setup.py author field contains unicode character.
I don't know if this is the right place for the issue, if not transfer it.
Expected behavior
Maybe uctools should be installed.
How to Reproduce
Run the following with admin powershell.
pip wheel --no-cache-dir --use-pep517 "uctools (==1.3.0)"

Output
➜ jeiea  pip wheel --no-cache-dir --use-pep517 "uctools (==1.3.0)"
Collecting uctools==1.3.0
  Downloading uctools-1.3.0.tar.gz (4.6 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  error: subprocess-exited-with-error

  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [20 lines of output]
      Traceback (most recent call last):
        File "C:\Python311\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 353, in <module>
          main()
        File "C:\Python311\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "C:\Python311\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 118, in get_requires_for_build_wheel
          return hook(config_settings)
                 ^^^^^^^^^^^^^^^^^^^^^
        File "C:\Users\jeiea\AppData\Local\Temp\pip-build-env-1da1ty1i\overlay\Lib\site-packages\setuptools\build_meta.py", line 325, in get_requires_for_build_wheel
          return self._get_build_requires(config_settings, requirements=['wheel'])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "C:\Users\jeiea\AppData\Local\Temp\pip-build-env-1da1ty1i\overlay\Lib\site-packages\setuptools\build_meta.py", line 295, in _get_build_requires
          self.run_setup()
        File "C:\Users\jeiea\AppData\Local\Temp\pip-build-env-1da1ty1i\overlay\Lib\site-packages\setuptools\build_meta.py", line 480, in run_setup
          super(_BuildMetaLegacyBackend, self).run_setup(setup_script=setup_script)
        File "C:\Users\jeiea\AppData\Local\Temp\pip-build-env-1da1ty1i\overlay\Lib\site-packages\setuptools\build_meta.py", line 311, in run_setup
          exec(code, locals())
        File "<string>", line 7, in <module>
      UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 2953: illegal multibyte sequence
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

Hi @jeiea that is very odd indeed...
The part that I don't understand is that setuptools specifically uses tokenize.open to avoid any encoding errors for setup.py. In theory tokenize.open should automatically detect and handle encoding.
I think it might be worthy for you to do an experiment:

Download the sdist (.tar.gz) from the PyPI for the specific version you want and extract it in a folder.
Try to read the contents for the setup.py using tokenize.open and then exec them... Does the same error still happens?

if there is a different error you might have to pass the local and global dict to exec (probably with __name__ set to __main__) and/or set sys.argv = ["python", "setup.py", "egg_info"].
it is probably better to create a virtual environment for that to avoid missing with your global Python... Also a good idea to install setuptools, wheel and any other build dependencies the package might require.

This is just an experiment removing setuptools.build_meta out of the equation to see if the problem is within that module. Probably it is very hard to replicate the exact environment that you have in your machine.
Please let us know how it goes.

Downloaded this
Wrote test.py

from tokenize import open

with open('setup.py') as f:
  s = f.read()
  print(s)
  exec(s)

With the above there was no error(regardless of virtual environment). Following is the full history.
➜ uctools-1.3.0  poetry init

This command will guide you through creating your pyproject.toml config.

Package name [uctools-1.3.0]:
Version [0.1.0]:
Description []:
Author [jeiea <>, n to skip]:  n
License []:
Compatible Python versions [^3.11]:

Would you like to define your main dependencies interactively? (yes/no) [yes] no
Would you like to define your development dependencies interactively? (yes/no) [yes] no
Generated file

[tool.poetry]
name = "uctools-1-3-0"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"
packages = [{include = "uctools_1"}]

[tool.poetry.dependencies]
python = "^3.11"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

Do you confirm generation? (yes/no) [yes]
➜ uctools-1.3.0  poetry shell
Creating virtualenv uctools-1-3-0-Q6_KiIg6-py3.11 in C:\Users\jeiea\AppData\Local\pypoetry\Cache\virtualenvs
Spawning shell within C:\Users\jeiea\AppData\Local\pypoetry\Cache\virtualenvs\uctools-1-3-0-Q6_KiIg6-py3.11
PowerShell 7.2.17
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

   A new PowerShell stable release is available: v7.4.0
   Upgrade now, or check out the release page at:
     https://aka.ms/PowerShell-Release?tag=v7.4.0

Loading personal and system profiles took 503ms.
(uctools-1-3-0-py3.11) ➜ uctools-1.3.0  python test.py
from setuptools import setup

setup(
    name='uctools',
    version="1.3.0",
    description='Unicode tools.',
    long_description=open('README.rst').read(),
    url='https://github.com/luismsgomes/uctools',
    author='Luís Gomes',
    author_email='luismsgomes@gmail.com',
    license='MIT',
    # See https://pypi.python.org/pypi?%3Aaction=list_classifiers
    classifiers=[
        'Development Status :: 5 - Production/Stable',
        'Intended Audience :: Developers',
        'Topic :: Text Processing :: General',
        'License :: OSI Approved :: MIT License',
        'Programming Language :: Python :: 3',
    ],
    python_requires='>=3',
    keywords='text unicode character',
    package_dir={'': 'src'},
    py_modules=['ucinfo', 'ucenum', 'ucnorm'],
    entry_points={
        'console_scripts': [
            'ucinfo=ucinfo:_main',
            'ucenum=ucenum:_main',
            'ucnorm=ucnorm:_main',
        ],
    },
)

usage: test.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
   or: test.py --help [cmd1 cmd2 ...]
   or: test.py --help-commands
   or: test.py cmd --help

error: no commands supplied

Amazing, I found something.
with getattr(tokenize, 'open', open)('setup.py') as f:
  s = f.read()
  print(s)
  exec(s)

(uctools-1-3-0-py3.11) ➜ uctools-1.3.0  ✗ python test.py
from setuptools import setup

setup(
    name='uctools',
    version="1.3.0",
    description='Unicode tools.',
    long_description=open('README.rst').read(),
    url='https://github.com/luismsgomes/uctools',
    author='Luís Gomes',
    author_email='luismsgomes@gmail.com',
    license='MIT',
    # See https://pypi.python.org/pypi?%3Aaction=list_classifiers
    classifiers=[
        'Development Status :: 5 - Production/Stable',
        'Intended Audience :: Developers',
        'Topic :: Text Processing :: General',
        'License :: OSI Approved :: MIT License',
        'Programming Language :: Python :: 3',
    ],
    python_requires='>=3',
    keywords='text unicode character',
    package_dir={'': 'src'},
    py_modules=['ucinfo', 'ucenum', 'ucnorm'],
    entry_points={
        'console_scripts': [
            'ucinfo=ucinfo:_main',
            'ucenum=ucenum:_main',
            'ucnorm=ucnorm:_main',
        ],
    },
)

Traceback (most recent call last):
  File "D:\jeiea\uctools-1.3.0\test.py", line 6, in <module>
    exec(s)
  File "<string>", line 7, in <module>
UnicodeDecodeError: 'cp949' codec can't decode byte

Does it mean that getattr(tokenize, 'open', open)is working differently than tokenize.open? Imports any currently  version of Python they should be equivalent isn't it? They should only differ for very old Python versions that are not used anymore, isn't it the case?

Does it mean that getattr(tokenize, 'open', open)is working differently than tokenize.open?

Yes

They should only differ for very old Python versions that are not used anymore, isn't it the case?

I'm sorry but I'm not python expert.

Yeah, so according to https://docs.python.org/3/library/tokenize.html#tokenize.open, tokenize.open exists in any Python >= 3.2... I don't understand why the behaviour would be different... But anyway, I guess we can remove the getattr part and write with tokenize.open(...) in setuptools.build_meta. Would you like to provide a PR for that?
The bad news is that I will only be able to cut a release once I am back in January :P.

authors: abravalheri jeiea


text:
Provide a direct link in the release history to the latest release

I.e. when you go to "Release History" for a project the latest release has no link while all other releases do. This means there's no easy way to grab the URL for the specific current release like you get when you click the "Newer version available" button on an older release.

@di I would like to look into this issue!

Hey, @waseem18! Are you working on this or could I take it?

authors: FlaviaBastos brettcannon waseem18

repo: pypa/warehouse

license_source: github-api


text:
Reject packages without a Requires-Python

A problem I've come across many times now is that a package will drop support for an old version and they'll even add a python_requires directive to their setup.py, only to cut a release using an old version of setuptools that doesn't actually understand the python_requires directive and thus silently fails. See, e.g. sphinx. This causes a bunch of problems because the erroneously uploaded packages now pollute pip installs of that package unless they are removed from PyPI or a post release is made.
Since there is no good reason to upload a package without explicitly specifying a Requires-Python directive, I think we can assume that this is an error and reject packages that don't have a Requires-Python.
My recommendation for migrating to the "always throw an error" version:

Start throwing a warning when Requires-Python is missing, with a link to the documentation on how to add Requires-Python
Update twine and all tools that upload packages (and setuptools, even though it's deprecated) to automatically transform that warning into an error overridable by --allow-no-python-requires
Add a backwards-compatibility API that allows you to upload packages without Requires-Python by configuring your upload endpoint to something not the default
Upgrade the warning to an error, dropping support for --allow-no-python-requires.

I think we could swap the order of 2 and 3 pretty easily - I'm guessing that updating the upload tools would be easier to do which is why I put them in this order, but 2 could be implemented in terms of 3.
In terms of time frame, I don't know how aggressive you (the Warehouse team) want to be. I think the first 3 can happen as soon as an implementation is available. It's probably a big ask to have all package maintainers switch over in a relatively short period of time, but I think a long deprecation period will be harmful given that it's likely a large number of packages are going to start dropping support for Python 2 soon, which will probably cause a ton of headaches if people aren't including Requires-Python in their metadata. Maybe a 6 months or so?

Since there is no good reason to upload a package without explicitly specifying a Requires-Python directive, I think we can assume that this is an error and reject packages that don't have a Requires-Python.

One use case would be a package that is compatible (or at least, thinks it's compatible) with all versions of Python. What should this field be for those packages, something like Requires-Python: >0?

Start throwing a warning when Requires-Python is missing, with a link to the documentation on how to add Requires-Python

I don't believe displaying a warning for a successful upload is possible at the moment without making changes to twine and the upload API, but this would probably be a beneficial change to make in general.
Worth mentioning that #726 might help with this a bit, because maintainers would be able to verify that the Requires-Python metadata they set actually made it to PyPI.

@di Yes, agreed that #726 would be very helpful.

One use case would be a package that is compatible (or at least, thinks it's compatible) with all versions of Python. What should this field be for those packages, something like Requires-Python: >0?

Presumably python_requires="*.*" or something like that? >0 would also work, though I really doubt there are any packages out there that actually support Python<2.0 anyway.

don't believe displaying a warning for a successful upload is possible at the moment without making changes to twine and the upload API, but this would probably be a beneficial change to make in general.

Hm. That's a bit of a problem, because half the issue here is that people tend to install setuptools or twine once and then never upgrade it. The people with updated versions of twine and setuptools are the least in need of this change.
Other possible options:

Rolling blackouts as was done for TLS and the PyPI.org transition, skipping the "raise a warning" phase entirely.
Send an e-mail to people who upload new packages without a Requires-Python directive (this might be way more e-mail than can be done safely)
Do some verification to check if the source distribution includes a python_requires directive, but the metadata failed to upload and send an e-mail only to those people (with instructions on how to fix it).
Implement the "warning" as a "fail only the first time" - parse the metadata and if it doesn't contain Requires-Python, hash the payload and store it, then return an error explaining why it failed. Uploading the exact same payload a second time would actually allow the upload to proceed.

If #726 is happening soon, option 4 could be implemented as "if you upload and it doesn't have Requires-Python, you must go through the 2-phase upload process and check a big red box that says, "I don't want my packages to properly advertise its requirements" before allowing it to proceed.

It seems that the other half of this issue is "how can we make sure users update setuptools/twine more often?"

Have it send a header with which tool and version. Slowly refuse upload from old-versions, tools that don't set these headers.

We discussed this today in IRC. It sounds like we do want to do this because -- among other things -- it would help with the new pip resolver rollout https://github.com/pypa/pip/issues/6536 and with stuff @techalchemy has to deal with in Pipenv.
I would love stats on how many projects have, as their most recent release, a project whose metadata has no Requires-Python. Is it possible to get that % or number?
Although it would be really nice to have #726 before implementing this, I'm ok with possibly going ahead and doing it without that feature anyway.

Yea that should be doable, I suspect the number is really low though.

it would help with the new pip resolver rollout

I'm not clear how it would help with the new resolver rollout. Can you clarify?
As far as I am aware, Python-Requires is essentially just another dependency that the resolver (new or old) has to deal with. Mandating it doesn't make any difference to pip (other than meaning that we'll now never have a case of a package with no dependencies, which makes a lot of our tests a little bit unrealistic, albeit not in a way that matters in practice 😉)
I'm a bit worried that this proposal will result in projects setting over-strict constraints (requiring only what they test on and support, for example, when older versions may well still work on a "don't come to us if something goes wrong" basis).

@pradyunsg I think you were in that discussion (in IRC today about Python-Requires) and you seemed actively interested in getting Warehouse to mandate it, but maybe I misread you - could you answer @pfmoore's question? If I misunderstood and we don't particularly need this for the resolver work, please do say so and I'll happily back off.

I'm a bit worried that this proposal will result in projects setting over-strict constraints (requiring only what they test on and support, for example, when older versions may well still work on a "don't come to us if something goes wrong" basis).

Well but if you are an advanced user and really want to get this package on an old Python version you probably can figure it out. Though if you are a new user and pip install foo and it does not work you at a loss. So I would see over-enforcing as better than being too lax.
And the all point of Python-Requires is also exactly for those old-python-users not to install a too-recent version of the package. Mostly I implemented it in Warehouse/PIP because IPython wanted to drop 2.x and couldn't without breaking for old user. I would even expect the opposite of you, and have project to drop support ini CI, break on old python, and forget to update Python-Requires.

As far as I am aware, Python-Requires is essentially just another dependency that the resolver (new or old) has to deal with

I have not been part of some of the discussion about the resolver so pardon me if I'm mistaken.  But, unlike the other dependencies, pip cannot change the current version of Python right ?  Requiring Python-Requires may dramatically reduce the search space of the resolver as the Python version is not a variable. It would even be strange to me if the resolver even knows about Python-Requires, wouldn't you just immediately filter out any package that is incompatible with the current Python and give the resulting set to the resolver ?

I think this is closer to "PyPI should have better, more strict metadata checks" than it is to "would help with the dependency resolver".
It'd nice to have this metadata mandatory for making packages actively consider this question prior to publishing, I don't think this directly affects the new resolver's rollout directly but, like all PyPI metadata stuff, this would have an indirect effect on the resolver.

Requiring Python-Requires may dramatically reduce the search space of the resolver as the Python version is not a variable. It would even be strange to me if the resolver even knows about Python-Requires, wouldn't you just immediately filter out any package that is incompatible with the current Python and give the resulting set to the resolver ?

Exactly this -- and without clean and enforced metadata in many cases we may not know which versions of python the uploader intended for their package to work on. As someone who maintains a tool that might run on python 3 but be asked to resolve dependencies against python 2, for example, it is incredibly useful to know whether a package is intended to work in python 3 or python 2 -- sometimes the act of resolution itself requires that you execute the package and in that case I tend to prefer learning from metadata than during failed execution.
To elaborate a but further, in pipenv we create lockfiles which might be compatible with multiple versions of python.  In an ideal universe, you would be able to, using only one runtime, generate a lockfile with a resolved set of packages for multiple versions of python based purely on metadata, simply by reading manifests and including the relevant markers.
And yes, I approach this from the perspective of dependency resolution, but I do also think that having good, robust metadata is important for many reasons.

I don't think this directly affects the new resolver's rollout

Everyone will still have to deal with the world as it is until rules are in place and enforced and there is some useful data to leverage, but my goal when I talk about this is to envision the world as it could be in the future. Just turning the switch on tomorrow won't fix the problem right away, but if we had done it two years ago my life would be significantly easier, even if there were still some old packages without properly populated fields.

my goal when I talk about this is to envision the world as it could be in the future.

Agreed. My point above (which I didn't state well) was that Requires-Python metadata, while useful, can (in the most general sense) only be evaluated at the same time as the other dependency constraints on a package, after we've read the metadata. And making it mandatory doesn't really change that code.
It's true that on PyPI the Requires-Python data is available from the index, and so can reduce the search space - and this is great. But pip (and any other real-world Python resolver) has to handle other indexes, and even local directories containing distribution files. For those, there's no saving and Requires-Python has to be processed in the constraint evaluation phase, not the file selection phase. So we do the check in both places - one for efficiency, the other for correctness.
Don't get me wrong - I'm 100% in favour of better, more strictly enforced, and static metadata. I just don't think having this piece will materially affect how we code the resolver in pip.

But pip (and any other real-world Python resolver) has to handle other indexes, and even local directories containing distribution files.

Ah, thanks I forget to consider this case. Though I'm guessing in these case the number of local packages will be way smaller than PyPI likely...
Warehouse also recently implemented "yank", which I see as a move toward cleaner metadata as you can "yank" packages with incorrect metadata, and publishing crates with incorrect metadata (including Python-Requires)  is part of life, and can be fixed by yank-and publish patch release.
Also I think we can add a step 0 in @pganssle proposal, we can actually get twine and other  packaging tool have warnings even before warehouse does it.

@pfmoore said:

Don't get me wrong - I'm 100% in favour of better, more strictly enforced, and static metadata. I just don't think having this piece will materially affect how we code the resolver in pip.

OK! Thanks for the consensus, pip developers - that helps me know that I should not nudge to try to get this implemented for the resolver work's sake.

The motivating failure mode happened again this week with pyrsistent, impacting many packages that still support Python 2: https://github.com/tobgu/pyrsistent/issues/208

authors: Carreau brainwane di dstufft itamarst pfmoore pganssle pradyunsg techalchemy


text:
form field macro

Fixes Problem #6393

Closing as per https://github.com/pypa/warehouse/issues/6393#issuecomment-630430923

source: gharchive/pull-request


text:
Scheduler

Add a scheduler for ICP and other algorithms need a loop stop condition.

The current implementation is pypose.module.ReduceToPlateau, should we move to pypose.utils.ReduceToPlateau? Note that this is different from pypose.optim.scheduler.StopOnPlateau which can only work for optimizers, this can work for any algorithms that need a loop.

The current implementation is pypose.module.ReduceToPlateau, should we move to pypose.utils.ReduceToPlateau? Note that this is different from pypose.optim.scheduler.StopOnPlateau which can only work for optimizers, this can work for any algorithms that need a loop.

Move pypose.module.ReduceToPlateau to pypose.utils.ReduceToPlateau sounds better to me, and it is a better practice to ensure modularity and prevent circular dependencies.
I had a quick look on pypose.optim.scheduler.StopOnPlateau, it appears to be an essential component of the optimizations. Are we going to merge these two schedulers? If that's not the case, what do you think about renaming the scheduler for non-optimization modules/functions to something else to prevent confusion?

repo: pypose/pypose


text:
CI run of cython on windows fails

The cython run on windows is failing with
c1: fatal error C1081:
'D:\a\binary-testing\binary-testing\cython\TEST_TMP\2\pyximport\pyximport_pyimport_only\TEST_TMP\temp.win-amd64-3.8\Release\a\binary-testing\binary-testing\cython\TEST_TMP\2\pyximport\pyximport_pyimport_only\TEST_TMP\temp.win-amd64-3.8\Release\a\_temp\46f8a4af-7ee0-4d9a-a854-a794a2900cc7\pypy-c-jit-104827-0360402c9455-win64\Lib\encodings\mbcs.obj':
file name too long

The CI is running python runtests.py -vv --no-code-style -x Debugger --backends=c -j7. Is there something the cython appveyor run is doing that this repo is not doing?

The limit is 260, that name is 267.

Windows need cython/cython#4630, which is stuck waiting for cython/cython#4625

Fixed by https://github.com/cython/cython/pull/4630

Cool. Now a windows pypy nightly run has "only" about 70 failing tests, where linux passes.
17 of them are of the form
ERROR: test_pure (Cython.Build.Tests.TestInline.TestInline)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\a\binary-testing\binary-testing\cy\Cython\Build\Tests\TestInline.py", line 68, in test_pure
    """, a=3, **self.test_kwds)
  File "D:\a\binary-testing\binary-testing\cy\Cython\Shadow.py", line 135, in inline
    return _cython_inline(f, *args, **kwds)
  File "D:\a\binary-testing\binary-testing\cy\Cython\Build\Inline.py", line 283, in cython_inline
    module = load_dynamic(module_name, module_path)
  File "D:\a\binary-testing\binary-testing\cy\Cython\Build\Inline.py", line 47, in load_dynamic
    module = _importlib_util.module_from_spec(spec)
  File "<frozen importlib._bootstrap>", line 565, in module_from_spec
  File "<builtin>/frozen importlib._bootstrap_external", line 1180, in create_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
ImportError: The parameter is incorrect

I don't see those in the complementary run of PR cython/cython#4324 so it seems like a PyPy-specific issue in _call_with_frames_removed

Down to one failing test on windows (which now started appearing on ubuntu as well:
Errors from shard 0:
======================================================================
FAIL: coerce_to_charptr (bytearray_coercion)
Doctest: bytearray_coercion.coerce_to_charptr
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/work/_temp/7ed94a14-4d41-419e-9be9-c83147194cb9/pypy-c-jit-107909-28d9e130d140-linux64/lib/pypy3.10/doctest.py", line 2223, in runTest
    raise self.failureException(self.format_failure(new.getvalue()))
AssertionError: Failed doctest test for bytearray_coercion.coerce_to_charptr
  File "/home/runner/work/binary-testing/binary-testing/cy/TEST_TMP/0/run/c/bytearray_coercion/bytearray_coercion.pypy310-pp73-x86_64-linux-gnu.so", line unknown line number, in coerce_to_charptr

----------------------------------------------------------------------
File "/home/runner/work/binary-testing/binary-testing/cy/TEST_TMP/0/run/c/bytearray_coercion/bytearray_coercion.pypy310-pp73-x86_64-linux-gnu.so", line ?, in bytearray_coercion.coerce_to_charptr
Failed example:
    coerced == b or (coerced, b)
Expected:
    True
Got:
    (bytearray(b'abc\xc41\x7f'), bytearray(b'abc'))

As noted in cython/cython#5833, PyByteArray_AsString is not adding a \0 to the returned string, even though it should.

The bytearray code was changed to add a \0, and windows runs are passing. There is a spurious macOS failure around time in c vs time in python, but that is a different issue. Closing.

authors: mattip scoder

repo: pypy/binary-testing

license: MIT


text:
Feature request: Add options to share your plans with the gm

This is a great module, but I feel like it would be nice if the GM could check what players plans are so they can help set it up.
Ideally there would still be a private option so players can keep some of their plots a secret.

Depending on how you imagine it to work, that might not be all that hard to implement.
I imagine we could add a drop down to the GM view for selecting other players.
It's certainly feasible to add a "share with GM" setting that players can opt into.

@pyrige it could be just pop up on the GM's screen, like "hey GM, check if I forgot something to add on this list". The GM can make changes to the player's contents if needed, and then closes it. Then it can be accessed by GM only if the player shares with GM again.

I think the above suggestions are great. I also want the opportunity to share To Do with other players not just with GM. Suggested solution: use the same solution as with "Completed" to share To Do with other players and GM.

The current version (0.2.0) lets the GM view other players' to-do lists. There's a task setting for keeping certain objectives secret.
Right now, other players cannot check the to-do list and GMs can't modify the items. I'll consider adding those options.

I'll close this for now as the initial request should be satisfied. But I also created #6 as a future enhancement that might require a mor extensive rework.

authors: Ulvtand apoapostolov connery0 pyrige

repo: pyrige/fvtt-keikaku


text:
167 add rollshadowzone

Closes #167.
Please consider the naming of these "special" transport zones.

I think it increases in clarity, while reducing complexity to users. The difference in those Units is the non optional usage of cooling water.

SO I am fine with those units. But we should try to make them as minimalistic as possible.

Since Transport is now able to calculate it's own length, another way is preferred.

repo: pyroll-project/pyroll-core


text:
force counts to be same length as bins

This forces User_Defined to provide bin counts for all bins, and not omit zero-count bins at the tail of the distribution.

Also, I should add, resolves #717 by @weikang9009

repo: pysal/pysal