构建Docker镜像执行pip3 install pyyaml时出现ImportError错误求助
问题
使用以下Dockerfile构建TensorFlow镜像时出现pip3运行错误,移除pip3 install pyyaml命令后镜像可正常构建,当前环境为Python 3.5:
FROM tensorflow/tensorflow:1.6.0-devel-gpu-py3 COPY ./home/ /home/ RUN mkdir /usr/java \ && cp -r /home/SySeVR/softdir/jdk1.8.0_161 /usr/java \ && mkdir /usr/ant \ && cp -r /home/SySeVR/softdir/apache-ant-1.9.14 /usr/ant \ && rm -rf /etc/apt/sources.list \ && cp -r /home/SySeVR/softdir/sources.list /etc/apt/ \ && rm -rf /etc/apt/sources.list.d \ && apt-get clean \ && apt-get update \ && rm -rf /etc/profile \ && cp -r /home/SySeVR/softdir/profile /etc \ && cd /home/SySeVR/softdir \ && chmod +x env.sh \ && ./env.sh \ && apt-get install -y python-setuptools \ && apt-get install -y python-dev \ && apt-get install -y python-pip \ && cd /home/SySeVR/softdir/py2neo-py2neo-2.0 \ && python2 setup.py install \ && cd /home/SySeVR/softdir/python-joern-0.3.1 \ && python2 setup.py install \ && apt-get install -y graphviz \ && apt-get install -y libgraphviz-dev \ && apt-get install -y pkg-config \ && apt-get install -y python-igraph \ && apt-get install -y python-virtualenv \ && pip3 install xlrd \ && pip3 install gensim==3.4 \ && pip3 install pyyaml \ && rm -rf /home/SySeVR/softdir
错误日志
Traceback (most recent call last): File "/usr/local/lib/python3.5/dist-packages/certifi/core.py", line 14, in 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/local/bin/pip3", line 7, in <module> from pip import main File "/usr/local/lib/python3.5/dist-packages/pip/__init__.py", line 21, in <module> from pip._vendor.requests.packages.urllib3.exceptions import DependencyWarning File "/usr/local/lib/python3.5/dist-packages/pip/_vendor/requests/__init__.py", line 65, in <module> from . import utils File "/usr/local/lib/python3.5/dist-packages/pip/_vendor/requests/utils.py", line 22, in <module> from . import certs File "/usr/local/lib/python3.5/dist-packages/pip/_vendor/requests/certs.py", line 17, in <module> from certifi import where File "/usr/local/lib/python3.5/dist-packages/certifi/__init__.py", line 1, in <module> from .core import contents, where File "/usr/local/lib/python3.5/dist-packages/certifi/core.py", line 46, 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'
解决方法
错误根源是Python 3.5已不再被新版本pip、certifi和pyyaml支持,需要做以下调整:
1. 降级pip到兼容Python 3.5的版本
Python 3.5支持的最后一个pip版本是20.3.4,先执行降级:
pip3 install pip==20.3.4
2. 安装兼容Python 3.5的pyyaml版本
pyyaml 5.4.1是支持Python 3.5的最后一个稳定版本,指定版本安装:
pip3 install pyyaml==5.4.1
修改后的Dockerfile相关片段
将原来的:
&& pip3 install xlrd \ && pip3 install gensim==3.4 \ && pip3 install pyyaml \
替换为:
&& pip3 install xlrd \ && pip3 install gensim==3.4 \ && pip3 install pip==20.3.4 \ && pip3 install pyyaml==5.4.1 \
这样修改后,就能正常完成镜像构建,同时保留pyyaml的安装。
内容的提问来源于stack exchange,提问作者Tasnim Fabiha
相关产品推荐
相关产品推荐

