Python 请求 RequestsDependencyWarning,它在重新安装相同版本的库后消失

Python requests RequestsDependencyWarning which disappears after re-installing the same version of the library

我正在使用 Docker 文件在 docker 容器中构建一个 python 环境。其中一个级别是 pip 安装一个 requirements.txt 文件,其中包括以下库:

chardet==3.0.4
requests==2.22.0
urllib3==1.25.6

镜像构建完成后,我创建了一个容器实例,运行其中包含以下内容: python -c "import requests" 给出以下输出:

/usr/lib/python2.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.25.6) or chardet (2.2.1) doesn't match a supported version! RequestsDependencyWarning)

很公平,但是如果我重新安装请求、pip install --upgrade requests --force-reinstall 和 运行 上面相同的 python 命令,我不会收到警告。

我可以在容器中再次检查每个库的版本,它们和以前完全一样:

chardet==3.0.4
requests==2.22.0
urllib3==1.25.6

那么为什么 requests 之前一直在发出错误,如果我的 Docker 图像中没有悬空的重新安装级别,我该如何确保这个警告不会出现在我的 Docker 图像中Docker文件?

在弹出警告时在我的代码中使用 requests 时,到目前为止我还没有发现任何不利影响,但是我宁愿它不存在,因为显然有什么东西触发了它。

我发现很多 posts/articles 建议坚持重新安装 requests,但是我不希望 Docker 文件中有这个多余的步骤,除非它是解决警告的唯一方法。

有趣的是,重新安装 chardet 也会删除警告,但重新安装 urllib3 不会。

-- 编辑 -- Docker要求的文件:

FROM centos:7

# Install external yum repositories
RUN yum install -y \
        epel-release \
        https://repo.ius.io/ius-release-el7.rpm \
        && yum clean all

# Install required rpm dependencies
RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && python get-pip.py
RUN yum install -y \
        systemd-python.x86_64 \
        git222 \
        gcc \
        python2-devel \
        openldap-devel \
        python-perf \
        python-linux-procfs \
        python-schedutils \
        policycoreutils-python \
        python-slip \
        python-slip-dbus \
        && yum clean all

# Install required pip dependencies
ADD requirements.txt /home/admin/container_files/
RUN pip install setuptools==30.1.0
RUN pip install -r /home/admin/container_files/requirements.txt

# Final update of packages
RUN yum update -y && yum clean all

解决方法是将文件中的安装重新排序为:

chardet==3.0.4
urllib3==1.25.6
requests==2.22.0

现在 python -c "import requests" 将从第一次开始工作

我建议你搬家:

RUN yum update -y && yum clean all

到第二行,如果您以后编辑一些代码,该行将被缓存。