Ubuntu 16.04安装requests失败,提示module 'os'无PathLike属性
问题
在Ubuntu 16.04系统中尝试安装requests模块,已尝试多种方案无效。系统已安装pip3,Python版本为2.7和3.5。执行命令pip3 install requests时出现以下报错:
Traceback (most recent call last): File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 33, in vendored __import__(vendored_name, globals(), locals(), level=0) ImportError: No module named 'pip._vendor.cachecontrol' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pa/.local/lib/python3.5/site-packages/certifi/core.py", line 12, in <module> from importlib.resources import path as get_path, read_text ImportError: No module named 'importlib.resources' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/bin/pip3", line 9, in <module> from pip import main File "/usr/lib/python3/dist-packages/pip/__init__.py", line 13, in <module> from pip.exceptions import InstallationError, CommandError, PipError File "/usr/lib/python3/dist-packages/pip/exceptions.py", line 6, in <module> from pip._vendor.six import iteritems File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 64, in <module> vendored("cachecontrol") File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 36, in vendored __import__(modulename, globals(), locals(), level=0) File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 664, in _load_unlocked File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible File "/usr/share/python-wheels/CacheControl-0.11.5-py2.py3-none-any.whl/cachecontrol/__init__.py", line 9, in <module> File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 664, in _load_unlocked File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible File "/usr/share/python-wheels/CacheControl-0.11.5-py2.py3-none-any.whl/cachecontrol/wrapper.py", line 1, in <module> File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 664, in _load_unlocked File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible File "/usr/share/python-wheels/CacheControl-0.11.5-py2.py3-none-any.whl/cachecontrol/adapter.py", line 3, in <module> File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 664, in _load_unlocked File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/__init__.py", line 58, in <module> File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 664, in _load_unlocked File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/utils.py", line 25, in <module> File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 664, in _load_unlocked File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/certs.py", line 17, in <module> File "/home/pa/.local/lib/python3.5/site-packages/certifi/__init__.py", line 1, in <module> from .core import contents, where File "/home/pa/.local/lib/python3.5/site-packages/certifi/core.py", line 44, in <module> Resource = Union[str, "os.PathLike"] File "/usr/lib/python3.5/typing.py", line 552, in __getitem__ dict(self.__dict__), parameters, _root=True) File "/usr/lib/python3.5/typing.py", line 512, in __new__ for t2 in all_params - {t1} if not isinstance(t2, TypeVar)): File "/usr/lib/python3.5/typing.py", line 512, in <genexpr> for t2 in all_params - {t1} if not isinstance(t2, TypeVar)): File "/usr/lib/python3.5/typing.py", line 190, in __subclasscheck__ self._eval_type(globalns, localns) File "/usr/lib/python3.5/typing.py", line 177, in _eval_type eval(self.__forward_code__, globalns, localns), File "<string>", line 1, in <module> AttributeError: module 'os' has no attribute 'PathLike'
同时通过PyCharm安装也失败。
解决方案
核心原因
Ubuntu 16.04自带的Python 3.5版本较老,os.PathLike是Python 3.6+才引入的特性,而当前安装的certifi版本过高,不兼容Python 3.5,导致pip调用时出错。
步骤
- 卸载不兼容的certifi版本
执行命令:
pip3 uninstall -y certifi
- 安装兼容Python 3.5的certifi版本
选择支持Python 3.5的最后一个certifi版本:
pip3 install certifi==2020.12.5
- 安装兼容Python 3.5的requests版本
requests从2.25.0开始不再支持Python 3.5,因此指定旧版本安装:
pip3 install requests==2.24.0
- 若pip本身损坏,可重新安装pip3
如果上述步骤执行时pip仍报错,先修复pip:
sudo apt-get install --reinstall python3-pip
再重复步骤1-3。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

