$ python/install/bin/python3.7 -m ensurepip install pyflakes
Traceback (most recent call last):
File "/tmp/python-distribution.Dh2VnKV1hPCw/python/install/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/tmp/python-distribution.Dh2VnKV1hPCw/python/install/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/tmp/python-distribution.Dh2VnKV1hPCw/python/install/lib/python3.7/ensurepip/__main__.py", line 5, in <module>
sys.exit(ensurepip._main())
File "/tmp/python-distribution.Dh2VnKV1hPCw/python/install/lib/python3.7/ensurepip/__init__.py", line 204, in _main
default_pip=args.default_pip,
File "/tmp/python-distribution.Dh2VnKV1hPCw/python/install/lib/python3.7/ensurepip/__init__.py", line 117, in _bootstrap
return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
File "/tmp/python-distribution.Dh2VnKV1hPCw/python/install/lib/python3.7/ensurepip/__init__.py", line 27, in _run_pip
import pip._internal
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 668, in _load_unlocked
File "<frozen importlib._bootstrap>", line 638, in _load_backward_compatible
File "/tmp/tmp6jcsm053/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/__init__.py", line 40, in <module>
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 668, in _load_unlocked
File "<frozen importlib._bootstrap>", line 638, in _load_backward_compatible
File "/tmp/tmp6jcsm053/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/autocompletion.py", line 8, in <module>
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 668, in _load_unlocked
File "<frozen importlib._bootstrap>", line 638, in _load_backward_compatible
File "/tmp/tmp6jcsm053/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/main_parser.py", line 12, in <module>
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 668, in _load_unlocked
File "<frozen importlib._bootstrap>", line 638, in _load_backward_compatible
File "/tmp/tmp6jcsm053/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/__init__.py", line 6, in <module>
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 668, in _load_unlocked
File "<frozen importlib._bootstrap>", line 638, in _load_backward_compatible
File "/tmp/tmp6jcsm053/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/completion.py", line 6, in <module>
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 668, in _load_unlocked
File "<frozen importlib._bootstrap>", line 638, in _load_backward_compatible
File "/tmp/tmp6jcsm053/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/base_command.py", line 20, in <module>
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 668, in _load_unlocked
File "<frozen importlib._bootstrap>", line 638, in _load_backward_compatible
File "/tmp/tmp6jcsm053/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/download.py", line 37, in <module>
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 668, in _load_unlocked
File "<frozen importlib._bootstrap>", line 638, in _load_backward_compatible
File "/tmp/tmp6jcsm053/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/utils/glibc.py", line 3, in <module>
File "/tmp/python-distribution.Dh2VnKV1hPCw/python/install/lib/python3.7/ctypes/__init__.py", line 444, in <module>
pythonapi = PyDLL(None)
File "/tmp/python-distribution.Dh2VnKV1hPCw/python/install/lib/python3.7/ctypes/__init__.py", line 356, in __init__
self._handle = _dlopen(self._name, mode)
OSError: Dynamic loading not supported
$ ldd python/install/bin/python3.7
not a dynamic executable
$ python/install/bin/python3.7
Python 3.7.3 (default, May 26 2019, 04:33:50)
[Clang 7.0.1 (tags/RELEASE_701/final)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/gps/src/python-build-standalone.git/build/python/install/lib/python3.7/ctypes/__init__.py", line 444, in <module>
pythonapi = PyDLL(None)
File "/home/gps/src/python-build-standalone.git/build/python/install/lib/python3.7/ctypes/__init__.py", line 356, in __init__
self._handle = _dlopen(self._name, mode)
OSError: Dynamic loading not supported
Environment
Description
In the bowels of pip, the
ctypesmodule is imported. Importing this module on statically linked executables (such as Python builds compiled with MUSL) fails withOSErrorbecause executingctypes/__init__.pyattempts to calldlopen(), which will always fail on binaries that don't support dynamic loading.This is arguably a bug in CPython's
ctypesmodule, as it could possibly gracefully fail on failure callingdlopen(). But that bug has shipped for years and it is everyone else's responsibility to work around it.Expected behavior
I think pip should handle failure to import the
ctypesmodule gracefully and not abort.How to Reproduce
With a statically linked Python executable that doesn't have a
.dynamicor other related ELF sections, attempt to runpython -m ensurepip install <package>.The zstd compressed tarball at https://github.com/indygreg/python-build-standalone/releases/download/20190505/cpython-3.7.3-linux64-musl-20190526T0219.tar.zst contains such an executable under
python/install/bin/python3.7.Output
The problem with CPython specifically: