Environment
jaraco/keyring: v20.0.1 (automatically installed as PIP dependency)
Description
Pip block during install, waiting for a keyring to unlock (at least that's my understanding)
Expected behavior
Pip install should proceed.
I'm also confused about why pypi try to use any keyring to access pypi.org (See in the verbose output Getting credentials from keyring for https://pypi.org/simple
).
How to Reproduce
pip install -vvv --no-deps --no-cache-dir -U importlib-metadata==1.1.3
Workaround
Disable the keyring
PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
pip install -vvv --no-deps --no-cache-dir -U importlib-metadata==1.1.3
Likely related issue: https://github.com/pypa/pip/issues/6773
Output
Non-user install because user site-packages disabled
Created temporary directory: /tmp/pip-ephem-wheel-cache-710zevvx
Created temporary directory: /tmp/pip-req-tracker-1h_3qnhb
Initialized build tracking at /tmp/pip-req-tracker-1h_3qnhb
Created build tracker: /tmp/pip-req-tracker-1h_3qnhb
Entered build tracker: /tmp/pip-req-tracker-1h_3qnhb
Created temporary directory: /tmp/pip-install-arqqjx8s
1 location(s) to search for versions of importlib-metadata:
* https://pypi.org/simple/importlib-metadata/
Fetching project page and analyzing links: https://pypi.org/simple/importlib-metadata/
Getting page https://pypi.org/simple/importlib-metadata/
Found index url https://pypi.org/simple
Getting credentials from keyring for https://pypi.org/simple
^CCleaning up...
Removed build tracker: '/tmp/pip-req-tracker-1h_3qnhb'
ERROR: Operation cancelled by user
Exception information:
Traceback (most recent call last):
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/cli/base_command.py", line 186, in _main
status = self.run(options, args)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/commands/install.py", line 331, in run
resolver.resolve(requirement_set)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/legacy_resolve.py", line 177, in resolve
discovered_reqs.extend(self._resolve_one(requirement_set, req))
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/legacy_resolve.py", line 333, in _resolve_one
abstract_dist = self._get_abstract_dist_for(req_to_install)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/legacy_resolve.py", line 281, in _get_abstract_dist_for
req.populate_link(self.finder, upgrade_allowed, require_hashes)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/req/req_install.py", line 249, in populate_link
self.link = finder.find_requirement(self, upgrade)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/index/package_finder.py", line 899, in find_requirement
req.name, specifier=req.specifier, hashes=hashes,
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/index/package_finder.py", line 881, in find_best_candidate
candidates = self.find_all_candidates(project_name)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/index/package_finder.py", line 826, in find_all_candidates
project_url, link_evaluator=link_evaluator,
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/index/package_finder.py", line 790, in process_project_url
html_page = self._link_collector.fetch_page(project_url)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/index/collector.py", line 497, in fetch_page
return _get_html_page(location, session=self.session)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/index/collector.py", line 337, in _get_html_page
resp = _get_html_response(url, session=session)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/index/collector.py", line 143, in _get_html_response
"Cache-Control": "max-age=0",
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_vendor/requests/sessions.py", line 546, in get
return self.request('GET', url, **kwargs)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/network/session.py", line 405, in request
return super(PipSession, self).request(method, url, *args, **kwargs)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_vendor/requests/sessions.py", line 519, in request
prep = self.prepare_request(req)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_vendor/requests/sessions.py", line 462, in prepare_request
hooks=merge_hooks(request.hooks, self.hooks),
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_vendor/requests/models.py", line 317, in prepare
self.prepare_auth(auth, url)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_vendor/requests/models.py", line 548, in prepare_auth
r = auth(self)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/network/auth.py", line 202, in __call__
url, username, password = self._get_url_and_credentials(req.url)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/network/auth.py", line 178, in _get_url_and_credentials
username, password = self._get_new_credentials(original_url)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/network/auth.py", line 151, in _get_new_credentials
get_keyring_auth(index_url, username) or
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/pip/_internal/network/auth.py", line 58, in get_keyring_auth
cred = get_credential(url, username)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/keyring/core.py", line 74, in get_credential
return _keyring_backend.get_credential(service_name, username)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/keyring/backends/SecretService.py", line 113, in get_credential
collection = self.get_preferred_collection()
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/keyring/backends/SecretService.py", line 60, in get_preferred_collection
collection.unlock()
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/secretstorage/collection.py", line 67, in unlock
return unlock_objects(self.connection, [self.collection_path])
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/secretstorage/util.py", line 154, in unlock_objects
dismissed, (signature, unlocked) = exec_prompt(connection, prompt)
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/secretstorage/util.py", line 140, in exec_prompt
connection.recv_messages()
File "/home/riquito/piggy_store/.env/lib64/python3.7/site-packages/jeepney/integrate/blocking.py", line 64, in recv_messages
b = unwrap_read(self.sock.recv(4096))
KeyboardInterrupt
having the same issue here, can't understand why keyring is needed on install
Any solution to this? I have the same issue after a reboot on Ubuntu 18.04
Any solution to this? I have the same issue after a reboot on Ubuntu 18.04
Not a solution, but I as a workaround have added the following to my ~/.bashrc
# 1-May-2020: Fix for Keyring error with pip. Hopefully new pip will fix it
# soon https://github.com/pypa/pip/issues/7883
export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
FYI: https://github.com/pypa/pip/pull/8687 should have made pip less eager in trying to use keyring. We're also聽considering making keyring support in pip into an opt-in: https://github.com/pypa/pip/issues/8719
I just got this on Debian Testing, gnome.
馃悮 pip install --verbose poetry==1.0.9
Non-user install because user site-packages disabled
Created temporary directory: /tmp/pip-ephem-wheel-cache-9bx45e78
Created temporary directory: /tmp/pip-req-tracker-lu2srv1l
Initialized build tracking at /tmp/pip-req-tracker-lu2srv1l
Created build tracker: /tmp/pip-req-tracker-lu2srv1l
Entered build tracker: /tmp/pip-req-tracker-lu2srv1l
Created temporary directory: /tmp/pip-install-t3llvdta
1 location(s) to search for versions of poetry:
* https://pypi.org/simple/poetry/
Fetching project page and analyzing links: https://pypi.org/simple/poetry/
Getting page https://pypi.org/simple/poetry/
Found index url https://pypi.org/simple
Getting credentials from keyring for https://pypi.org/simple
This doesn't happen with a fresh environment, though. Just one with poetry installed.
馃悮 pip freeze
attrs==20.2.0
CacheControl==0.12.6
cachy==0.3.0
certifi==2020.6.20
cffi==1.14.2
chardet==3.0.4
cleo==0.7.6
clikit==0.4.3
cryptography==3.1
html5lib==1.1
idna==2.10
jeepney==0.4.3
jsonschema==3.2.0
keyring==20.0.1
lockfile==0.12.2
msgpack==1.0.0
pastel==0.2.0
pexpect==4.8.0
pkginfo==1.5.0.1
poetry==1.0.10
ptyprocess==0.6.0
pycparser==2.20
pylev==1.3.0
pyparsing==2.4.7
pyrsistent==0.14.11
requests==2.24.0
requests-toolbelt==0.8.0
SecretStorage==3.1.2
shellingham==1.3.2
six==1.15.0
tomlkit==0.5.11
urllib3==1.25.10
webencodings==0.5.1
(Probably the addition of the non-default keyring package.)
I am also experiencing pip hanging indefinitely on getting credentials from the keyring when using pyenv
. It works without the pyenv shims. This is on Ubuntu 20.04
, pyenv 1.2.20-18-g5d84eed8
running python3.8.6
environment with pip 20.2.3
.
Sample output:
$ pip install -vvv asciinema
Using pip 20.2.3 from /home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip (python 3.8)
Non-user install because site-packages writeable
Created temporary directory: /tmp/pip-ephem-wheel-cache-q3syfjk6
Created temporary directory: /tmp/pip-req-tracker-svoa_2fh
Initialized build tracking at /tmp/pip-req-tracker-svoa_2fh
Created build tracker: /tmp/pip-req-tracker-svoa_2fh
Entered build tracker: /tmp/pip-req-tracker-svoa_2fh
Created temporary directory: /tmp/pip-install-sgviwh00
1 location(s) to search for versions of asciinema:
* https://pypi.org/simple/asciinema/
Fetching project page and analyzing links: https://pypi.org/simple/asciinema/
Getting page https://pypi.org/simple/asciinema/
Found index url https://pypi.org/simple
Getting credentials from keyring for https://pypi.org/simple
^CERROR: Operation cancelled by user
Exception information:
Traceback (most recent call last):
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/cli/base_command.py", line 228, in _main
status = self.run(options, args)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/cli/req_command.py", line 182, in wrapper
return func(self, options, args)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/commands/install.py", line 323, in run
requirement_set = resolver.resolve(
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/resolution/legacy/resolver.py", line 183, in resolve
discovered_reqs.extend(self._resolve_one(requirement_set, req))
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/resolution/legacy/resolver.py", line 388, in _resolve_one
abstract_dist = self._get_abstract_dist_for(req_to_install)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/resolution/legacy/resolver.py", line 339, in _get_abstract_dist_for
self._populate_link(req)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/resolution/legacy/resolver.py", line 305, in _populate_link
req.link = self._find_requirement_link(req)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/resolution/legacy/resolver.py", line 270, in _find_requirement_link
best_candidate = self.finder.find_requirement(req, upgrade)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/index/package_finder.py", line 898, in find_requirement
best_candidate_result = self.find_best_candidate(
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/index/package_finder.py", line 881, in find_best_candidate
candidates = self.find_all_candidates(project_name)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/index/package_finder.py", line 825, in find_all_candidates
package_links = self.process_project_url(
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/index/package_finder.py", line 790, in process_project_url
html_page = self._link_collector.fetch_page(project_url)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/index/collector.py", line 643, in fetch_page
return _get_html_page(location, session=self.session)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/index/collector.py", line 455, in _get_html_page
resp = _get_html_response(url, session=session)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/index/collector.py", line 152, in _get_html_response
resp = session.get(
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_vendor/requests/sessions.py", line 543, in get
return self.request('GET', url, **kwargs)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/network/session.py", line 421, in request
return super(PipSession, self).request(method, url, *args, **kwargs)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_vendor/requests/sessions.py", line 516, in request
prep = self.prepare_request(req)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_vendor/requests/sessions.py", line 449, in prepare_request
p.prepare(
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_vendor/requests/models.py", line 318, in prepare
self.prepare_auth(auth, url)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_vendor/requests/models.py", line 549, in prepare_auth
r = auth(self)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/network/auth.py", line 209, in __call__
url, username, password = self._get_url_and_credentials(req.url)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/network/auth.py", line 184, in _get_url_and_credentials
username, password = self._get_new_credentials(original_url)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/network/auth.py", line 156, in _get_new_credentials
get_keyring_auth(index_url, username) or
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip/_internal/network/auth.py", line 58, in get_keyring_auth
cred = get_credential(url, username)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/keyring/core.py", line 68, in get_credential
return _keyring_backend.get_credential(service_name, username)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/keyring/backends/SecretService.py", line 115, in get_credential
collection = self.get_preferred_collection()
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/keyring/backends/SecretService.py", line 61, in get_preferred_collection
collection.unlock()
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/secretstorage/collection.py", line 67, in unlock
return unlock_objects(self.connection, [self.collection_path])
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/secretstorage/util.py", line 154, in unlock_objects
dismissed, (signature, unlocked) = exec_prompt(connection, prompt)
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/secretstorage/util.py", line 140, in exec_prompt
connection.recv_messages()
File "/home/psacawa/.pyenv/versions/3.8.6/lib/python3.8/site-packages/jeepney/integrate/blocking.py", line 64, in recv_messages
b = unwrap_read(self.sock.recv(4096))
KeyboardInterrupt
Removed build tracker: '/tmp/pip-req-tracker-svoa_2fh'
Most helpful comment
Not a solution, but I as a workaround have added the following to my
~/.bashrc