Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use of --no-binary :all: in License Fetching causes errors #8

Closed
jaraco opened this issue Mar 29, 2020 · 4 comments
Closed

Use of --no-binary :all: in License Fetching causes errors #8

jaraco opened this issue Mar 29, 2020 · 4 comments
Labels
bug Something isn't working enhancement New feature or request

Comments

@jaraco
Copy link
Contributor

jaraco commented Mar 29, 2020

Attempting to refresh the vendored libraries for pip, I encounter an error:

pip run-command $ vendoring sync -v .
Load configuration... 
  Will attempt to load /Users/jaraco/code/public/pypa/pip/pyproject.toml.
  Read configuration file.
  Parsed configuration file.
  Validated configuration.
  Done!
Clean existing libraries... 
  Done!
Add vendored libraries... 
  Running pip install -t src/pip/_vendor -r src/pip/_vendor/vendor.txt --no-compile --no-deps
    Collecting appdirs==1.4.3
      Using cached appdirs-1.4.3-py2.py3-none-any.whl (12 kB)
    Collecting CacheControl==0.12.6
      Using cached CacheControl-0.12.6-py2.py3-none-any.whl (19 kB)
    Collecting colorama==0.4.3
      Using cached colorama-0.4.3-py2.py3-none-any.whl (15 kB)
    Collecting contextlib2==0.6.0
      Using cached contextlib2-0.6.0-py2.py3-none-any.whl (9.7 kB)
    Processing /Users/jaraco/Library/Caches/pip/wheels/eb/4e/d2/a903d4184fb49e4ac06474d65715b129aee13d69f7d227e78e/distlib-0.3.0-py3-none-any.whl
    Collecting distro==1.4.0
      Using cached distro-1.4.0-py2.py3-none-any.whl (17 kB)
    Collecting html5lib==1.0.1
      Using cached html5lib-1.0.1-py2.py3-none-any.whl (117 kB)
    Collecting ipaddress==1.0.23
      Using cached ipaddress-1.0.23-py2.py3-none-any.whl (18 kB)
    Processing /Users/jaraco/Library/Caches/pip/wheels/5d/f2/04/0d19c10080b996bef17c908a6243e6e65d8da1a4094a3f604d/msgpack-0.6.2-cp38-cp38-macosx_10_9_x86_64.whl
    Collecting packaging==20.1
      Using cached packaging-20.1-py2.py3-none-any.whl (36 kB)
    Collecting pep517==0.7.0
      Using cached pep517-0.7.0-py2.py3-none-any.whl (46 kB)
    Collecting pip-run==6
      Using cached pip_run-6.0.0-py2.py3-none-any.whl (15 kB)
    Processing /Users/jaraco/Library/Caches/pip/wheels/f1/5b/38/115b213dfbf5562108ea22df17c063f6378350205a819795aa/progress-1.5-py3-none-any.whl
    Collecting pyparsing==2.4.6
      Using cached pyparsing-2.4.6-py2.py3-none-any.whl (67 kB)
    Collecting pytoml==0.1.21
      Using cached pytoml-0.1.21-py2.py3-none-any.whl (8.5 kB)
    Collecting requests==2.22.0
      Using cached requests-2.22.0-py2.py3-none-any.whl (57 kB)
    Collecting certifi==2019.11.28
      Using cached certifi-2019.11.28-py2.py3-none-any.whl (156 kB)
    Collecting chardet==3.0.4
      Using cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)
    Collecting idna==2.8
      Using cached idna-2.8-py2.py3-none-any.whl (58 kB)
    Collecting urllib3==1.25.7
      Using cached urllib3-1.25.7-py2.py3-none-any.whl (125 kB)
    Processing /Users/jaraco/Library/Caches/pip/wheels/c4/a7/48/0a434133f6d56e878ca511c0e6c38326907c0792f67b476e56/retrying-1.3.3-py3-none-any.whl
    Collecting setuptools==44.0.0
      Using cached setuptools-44.0.0-py2.py3-none-any.whl (583 kB)
    Collecting six==1.14.0
      Using cached six-1.14.0-py2.py3-none-any.whl (10 kB)
    Collecting webencodings==0.5.1
      Using cached webencodings-0.5.1-py2.py3-none-any.whl (11 kB)
    Collecting resolvelib
      Cloning https://github.com/sarugaku/resolvelib.git (to revision fbc8bb28d6cff98b2) to /private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-install-gldfqnfz/resolvelib
      Running command git clone -q https://github.com/sarugaku/resolvelib.git /private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-install-gldfqnfz/resolvelib
      WARNING: Did not find branch or tag 'fbc8bb28d6cff98b2', assuming revision or ref.
      Running command git checkout -q fbc8bb28d6cff98b2
      Installing build dependencies: started
      Installing build dependencies: finished with status 'done'
      Getting requirements to build wheel: started
      Getting requirements to build wheel: finished with status 'done'
        Preparing wheel metadata: started
        Preparing wheel metadata: finished with status 'done'
    Building wheels for collected packages: resolvelib
      Building wheel for resolvelib (PEP 517): started
      Building wheel for resolvelib (PEP 517): finished with status 'done'
      Created wheel for resolvelib: filename=resolvelib-0.2.3.dev0-py2.py3-none-any.whl size=10456 sha256=c36418fbf2aad7e990e2ec82b388e2048d9a109732570a19f57c153c932668c1
      Stored in directory: /private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-ephem-wheel-cache-r8n8sbky/wheels/17/2f/a1/1482fe9d020595886463cd18471d8b68a4494042156b99decf
    Successfully built resolvelib
    Installing collected packages: appdirs, CacheControl, colorama, contextlib2, distlib, distro, html5lib, ipaddress, msgpack, packaging, pep517, pip-run, progress, pyparsing, pytoml, requests, certifi, chardet, idna, urllib3, retrying, setuptools, six, webencodings, resolvelib
    Successfully installed CacheControl-0.12.6 appdirs-1.4.3 certifi-2019.11.28 chardet-3.0.4 colorama-0.4.3 contextlib2-0.6.0 distlib-0.3.0 distro-1.4.0 html5lib-1.0.1 idna-2.8 ipaddress-1.0.23 msgpack-0.6.2 packaging-20.1 pep517-0.7.0 pip-run-6.0.0 progress-1.5 pyparsing-2.4.6 pytoml-0.1.21 requests-2.22.0 resolvelib-0.2.3.dev0 retrying-1.3.3 setuptools-44.0.0 six-1.14.0 urllib3-1.25.7 webencodings-0.5.1
  Running git apply --verbose tools/automation/vendoring/patches/requests.patch
    Checking patch src/pip/_vendor/requests/packages.py...
    Checking patch src/pip/_vendor/requests/__init__.py...
    Hunk #1 succeeded at 91 (offset 11 lines).
    Checking patch src/pip/_vendor/requests/compat.py...
    Applied patch src/pip/_vendor/requests/packages.py cleanly.
    Applied patch src/pip/_vendor/requests/__init__.py cleanly.
    Applied patch src/pip/_vendor/requests/compat.py cleanly.
  Running git apply --verbose tools/automation/vendoring/patches/appdirs.patch
    Checking patch src/pip/_vendor/appdirs.py...
    Hunk #4 succeeded at 207 (offset 4 lines).
    Hunk #6 succeeded at 298 (offset -2 lines).
    Hunk #7 succeeded at 568 (offset -2 lines).
    Applied patch src/pip/_vendor/appdirs.py cleanly.
  Running git apply --verbose tools/automation/vendoring/patches/html5lib.patch
    Checking patch src/pip/_vendor/html5lib/_trie/_base.py...
    Checking patch src/pip/_vendor/html5lib/treebuilders/dom.py...
    Applied patch src/pip/_vendor/html5lib/_trie/_base.py cleanly.
    Applied patch src/pip/_vendor/html5lib/treebuilders/dom.py cleanly.
  Done!
Fetch licenses... 
  Running pip download -r src/pip/_vendor/vendor.txt --no-binary :all: --no-deps --dest src/pip/_vendor/__tmp__
    Collecting appdirs==1.4.3
      Using cached appdirs-1.4.3.tar.gz (12 kB)
        ERROR: Command errored out with exit status 1:
         command: /usr/local/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-download-w6w2oq4j/appdirs/setup.py'"'"'; __file__='"'"'/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-download-w6w2oq4j/appdirs/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-download-w6w2oq4j/appdirs/pip-egg-info
             cwd: /private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-download-w6w2oq4j/appdirs/
        Complete output (3 lines):
        Traceback (most recent call last):
          File "<string>", line 1, in <module>
        ModuleNotFoundError: No module named 'setuptools'
        ----------------------------------------
    ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  Done!
Generate static-typing stubs... 
  Done!

The build fails because setuptools isn't installed and appdirs has an implicit dependency on setuptools.

I tried building with PEP 517 instead, but I get a different error.

pip run-command $ env PIP_USE_PEP517=True vendoring sync -v .                                                                                                             
Load configuration... 
  Will attempt to load /Users/jaraco/code/public/pypa/pip/pyproject.toml.
  Read configuration file.
  Parsed configuration file.
  Validated configuration.
  Done!
Clean existing libraries... 
  Done!
Add vendored libraries... 
  Running pip install -t src/pip/_vendor -r src/pip/_vendor/vendor.txt --no-compile --no-deps
    Collecting appdirs==1.4.3
      Using cached appdirs-1.4.3-py2.py3-none-any.whl (12 kB)
    Collecting CacheControl==0.12.6
      Using cached CacheControl-0.12.6-py2.py3-none-any.whl (19 kB)
    Collecting colorama==0.4.3
      Using cached colorama-0.4.3-py2.py3-none-any.whl (15 kB)
    Collecting contextlib2==0.6.0
      Using cached contextlib2-0.6.0-py2.py3-none-any.whl (9.7 kB)
    Processing /Users/jaraco/Library/Caches/pip/wheels/eb/4e/d2/a903d4184fb49e4ac06474d65715b129aee13d69f7d227e78e/distlib-0.3.0-py3-none-any.whl
    Collecting distro==1.4.0
      Using cached distro-1.4.0-py2.py3-none-any.whl (17 kB)
    Collecting html5lib==1.0.1
      Using cached html5lib-1.0.1-py2.py3-none-any.whl (117 kB)
    Collecting ipaddress==1.0.23
      Using cached ipaddress-1.0.23-py2.py3-none-any.whl (18 kB)
    Processing /Users/jaraco/Library/Caches/pip/wheels/5d/f2/04/0d19c10080b996bef17c908a6243e6e65d8da1a4094a3f604d/msgpack-0.6.2-cp38-cp38-macosx_10_9_x86_64.whl
    Collecting packaging==20.1
      Using cached packaging-20.1-py2.py3-none-any.whl (36 kB)
    Collecting pep517==0.7.0
      Using cached pep517-0.7.0-py2.py3-none-any.whl (46 kB)
    Collecting pip-run==6
      Using cached pip_run-6.0.0-py2.py3-none-any.whl (15 kB)
    Processing /Users/jaraco/Library/Caches/pip/wheels/f1/5b/38/115b213dfbf5562108ea22df17c063f6378350205a819795aa/progress-1.5-py3-none-any.whl
    Collecting pyparsing==2.4.6
      Using cached pyparsing-2.4.6-py2.py3-none-any.whl (67 kB)
    Collecting pytoml==0.1.21
      Using cached pytoml-0.1.21-py2.py3-none-any.whl (8.5 kB)
    Collecting requests==2.22.0
      Using cached requests-2.22.0-py2.py3-none-any.whl (57 kB)
    Collecting certifi==2019.11.28
      Using cached certifi-2019.11.28-py2.py3-none-any.whl (156 kB)
    Collecting chardet==3.0.4
      Using cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)
    Collecting idna==2.8
      Using cached idna-2.8-py2.py3-none-any.whl (58 kB)
    Collecting urllib3==1.25.7
      Using cached urllib3-1.25.7-py2.py3-none-any.whl (125 kB)
    Processing /Users/jaraco/Library/Caches/pip/wheels/c4/a7/48/0a434133f6d56e878ca511c0e6c38326907c0792f67b476e56/retrying-1.3.3-py3-none-any.whl
    Collecting setuptools==44.0.0
      Using cached setuptools-44.0.0-py2.py3-none-any.whl (583 kB)
    Collecting six==1.14.0
      Using cached six-1.14.0-py2.py3-none-any.whl (10 kB)
    Collecting webencodings==0.5.1
      Using cached webencodings-0.5.1-py2.py3-none-any.whl (11 kB)
    Collecting resolvelib
      Cloning https://github.com/sarugaku/resolvelib.git (to revision fbc8bb28d6cff98b2) to /private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-install-mo2tgut3/resolvelib
      Running command git clone -q https://github.com/sarugaku/resolvelib.git /private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-install-mo2tgut3/resolvelib
      WARNING: Did not find branch or tag 'fbc8bb28d6cff98b2', assuming revision or ref.
      Running command git checkout -q fbc8bb28d6cff98b2
      Installing build dependencies: started
      Installing build dependencies: finished with status 'done'
      Getting requirements to build wheel: started
      Getting requirements to build wheel: finished with status 'done'
        Preparing wheel metadata: started
        Preparing wheel metadata: finished with status 'done'
    Building wheels for collected packages: resolvelib
      Building wheel for resolvelib (PEP 517): started
      Building wheel for resolvelib (PEP 517): finished with status 'done'
      Created wheel for resolvelib: filename=resolvelib-0.2.3.dev0-py2.py3-none-any.whl size=10456 sha256=d8a59220a231482441c273c2c5d9049383e741112040e8e35b74a952970913e1
      Stored in directory: /private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-ephem-wheel-cache-1chhzl_f/wheels/17/2f/a1/1482fe9d020595886463cd18471d8b68a4494042156b99decf
    Successfully built resolvelib
    Installing collected packages: appdirs, CacheControl, colorama, contextlib2, distlib, distro, html5lib, ipaddress, msgpack, packaging, pep517, pip-run, progress, pyparsing, pytoml, requests, certifi, chardet, idna, urllib3, retrying, setuptools, six, webencodings, resolvelib
    Successfully installed CacheControl-0.12.6 appdirs-1.4.3 certifi-2019.11.28 chardet-3.0.4 colorama-0.4.3 contextlib2-0.6.0 distlib-0.3.0 distro-1.4.0 html5lib-1.0.1 idna-2.8 ipaddress-1.0.23 msgpack-0.6.2 packaging-20.1 pep517-0.7.0 pip-run-6.0.0 progress-1.5 pyparsing-2.4.6 pytoml-0.1.21 requests-2.22.0 resolvelib-0.2.3.dev0 retrying-1.3.3 setuptools-44.0.0 six-1.14.0 urllib3-1.25.7 webencodings-0.5.1
  Running git apply --verbose tools/automation/vendoring/patches/requests.patch
    Checking patch src/pip/_vendor/requests/packages.py...
    Checking patch src/pip/_vendor/requests/__init__.py...
    Hunk #1 succeeded at 91 (offset 11 lines).
    Checking patch src/pip/_vendor/requests/compat.py...
    Applied patch src/pip/_vendor/requests/packages.py cleanly.
    Applied patch src/pip/_vendor/requests/__init__.py cleanly.
    Applied patch src/pip/_vendor/requests/compat.py cleanly.
  Running git apply --verbose tools/automation/vendoring/patches/appdirs.patch
    Checking patch src/pip/_vendor/appdirs.py...
    Hunk #4 succeeded at 207 (offset 4 lines).
    Hunk #6 succeeded at 298 (offset -2 lines).
    Hunk #7 succeeded at 568 (offset -2 lines).
    Applied patch src/pip/_vendor/appdirs.py cleanly.
  Running git apply --verbose tools/automation/vendoring/patches/html5lib.patch
    Checking patch src/pip/_vendor/html5lib/_trie/_base.py...
    Checking patch src/pip/_vendor/html5lib/treebuilders/dom.py...
    Applied patch src/pip/_vendor/html5lib/_trie/_base.py cleanly.
    Applied patch src/pip/_vendor/html5lib/treebuilders/dom.py cleanly.
  Done!
Fetch licenses... 
  Running pip download -r src/pip/_vendor/vendor.txt --no-binary :all: --no-deps --dest src/pip/_vendor/__tmp__
    Collecting appdirs==1.4.3
      Using cached appdirs-1.4.3.tar.gz (12 kB)
      Installing build dependencies: started
      Installing build dependencies: finished with status 'error'
      ERROR: Command errored out with exit status 1:
       command: /usr/local/bin/python /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip install --ignore-installed --no-user --prefix /private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-build-env-065ppv4l/overlay --no-warn-script-location --no-binary :all: --only-binary :none: -i https://pypi.org/simple -- 'setuptools>=40.8.0' wheel
           cwd: None
      Complete output (35 lines):
      Collecting setuptools>=40.8.0
        Using cached setuptools-46.1.3.zip (862 kB)
        Installing build dependencies: started
        Installing build dependencies: finished with status 'error'
        ERROR: Command errored out with exit status 2:
         command: /usr/local/bin/python /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip install --ignore-installed --no-user --prefix /private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-build-env-vpge4jof/overlay --no-warn-script-location --no-binary :all: --only-binary :none: -i https://pypi.org/simple -- 'setuptools>=40.8.0' wheel
             cwd: None
        Complete output (25 lines):
        Collecting setuptools>=40.8.0
          Using cached setuptools-46.1.3.zip (862 kB)
        ERROR: Exception:
        Traceback (most recent call last):
          File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip/_internal/cli/base_command.py", line 186, in _main
            status = self.run(options, args)
          File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip/_internal/commands/install.py", line 331, in run
            resolver.resolve(requirement_set)
          File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip/_internal/legacy_resolve.py", line 177, in resolve
            discovered_reqs.extend(self._resolve_one(requirement_set, req))
          File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip/_internal/legacy_resolve.py", line 333, in _resolve_one
            abstract_dist = self._get_abstract_dist_for(req_to_install)
          File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip/_internal/legacy_resolve.py", line 282, in _get_abstract_dist_for
            abstract_dist = self.preparer.prepare_linked_requirement(req)
          File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip/_internal/operations/prepare.py", line 515, in prepare_linked_requirement
            abstract_dist = _get_prepared_distribution(
          File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip/_internal/operations/prepare.py", line 94, in _get_prepared_distribution
            with req_tracker.track(req):
          File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/contextlib.py", line 113, in __enter__
            return next(self.gen)
          File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip/_internal/req/req_tracker.py", line 148, in track
            self.add(req)
          File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip/_internal/req/req_tracker.py", line 115, in add
            raise LookupError(message)
        LookupError: https://files.pythonhosted.org/packages/b5/96/af1686ea8c1e503f4a81223d4a3410e7587fd52df03083de24161d0df7d4/setuptools-46.1.3.zip#sha256=795e0475ba6cd7fa082b1ee6e90d552209995627a2a227a47c6ea93282f4bfb1 (from https://pypi.org/simple/setuptools/) (requires-python:>=3.5) is already being built: setuptools>=40.8.0 from https://files.pythonhosted.org/packages/b5/96/af1686ea8c1e503f4a81223d4a3410e7587fd52df03083de24161d0df7d4/setuptools-46.1.3.zip#sha256=795e0475ba6cd7fa082b1ee6e90d552209995627a2a227a47c6ea93282f4bfb1
        ----------------------------------------
      ERROR: Command errored out with exit status 2: /usr/local/bin/python /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip install --ignore-installed --no-user --prefix /private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-build-env-vpge4jof/overlay --no-warn-script-location --no-binary :all: --only-binary :none: -i https://pypi.org/simple -- 'setuptools>=40.8.0' wheel Check the logs for full command output.
      ----------------------------------------
    ERROR: Command errored out with exit status 1: /usr/local/bin/python /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip install --ignore-installed --no-user --prefix /private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-build-env-065ppv4l/overlay --no-warn-script-location --no-binary :all: --only-binary :none: -i https://pypi.org/simple -- 'setuptools>=40.8.0' wheel Check the logs for full command output.
  Done!
Generate static-typing stubs... 
  Done!

I can see that vendoring invokes pip with --no-binary :all:, which is broken and unsupported.

@jaraco
Copy link
Contributor Author

jaraco commented Mar 29, 2020

I was able to work around the issue by installing setuptools in the environment where the pip command could be found, but it's a little awkward and difficult to communicate this dependency.

@jaraco
Copy link
Contributor Author

jaraco commented Mar 29, 2020

Perhaps while vendoring relies on an implicit dependency on setuptools in the environment where pip is invoked, perhaps vendoring itself should declare a dependency on pip and setuptools and invoke pip from the same environment where vendoring is executed.

@pradyunsg pradyunsg added bug Something isn't working enhancement New feature or request labels Apr 2, 2020
@pradyunsg pradyunsg changed the title Use of --no-binary :all: is unsupported, causes errors Use of --no-binary :all: in License Fetching causes errors Apr 2, 2020
@pradyunsg
Copy link
Owner

I want to completely rework the license fetching logic; to depend on wheels or source repositories instead of trying to fetch and build sdists. That would significantly speed up the relevant logic as well as resolve this issue.

I just haven't had the time to do it basically, since I first want to write more complete tests for vendoring before adding/changing the functionality.

@pradyunsg
Copy link
Owner

f89b90c does this. :)

I'll cut a release for this sometime soon.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants