使用`pip3 install pyyaml`构建Docker镜像返回错误:“ImportError:没有名为'importlib.resources'的模块”

问题描述 投票:0回答:1

这是我的dockerfile:

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

当我尝试从该 dockerfile 构建映像时,它返回以下错误:

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'

如果我删除第二行到最后一行(

pip3 install pyyaml
),它就可以正常工作。

从错误消息来看,似乎使用的是python 3.5。我尝试仅将 3.6 用于 pyyaml 但没有成功。我不知道正确的方法。

python-3.x docker pyyaml
1个回答
0
投票

这是3.7版本详细介绍的包这里

所以它需要作为软件包安装的一部分放在docker上,因此添加:

pip3 安装 importlib-resources

© www.soinside.com 2019 - 2024. All rights reserved.