猿问

为什么 pip 声称我有一个不兼容的模块,尽管版本正确(并破坏了 docker 构建)?

在 docker 容器中构建脚本时,我需要安装外部库。其中一个失败了:


Step 2/6 : RUN pip install paho-mqtt logbook arrow requests ics

 ---> Running in 93d9144d6224

(...)


ERROR: ics 0.5 has requirement arrow<0.12,>=0.11, but you'll have arrow 0.15.2 which is incompatible.

Installing collected packages: paho-mqtt, logbook, six, python-dateutil, arrow, chardet, certifi, urllib3, idna, requests, ics

Successfully installed arrow-0.15.2 certifi-2019.9.11 chardet-3.0.4 ics-0.5 idna-2.8 logbook-1.5.2 paho-mqtt-1.4.0 python-dateutil-2.8.0 requests-2.22.0 six-1.12.0 urllib3-1.25.5

我不明白这个错误:

  • 版本似乎还可以:0.15.2 >= 0.11

  • 尽管出现错误,但安装“成功”

在任何情况下(无论安装成功与否),此错误都会破坏 docker 构建。

主要问题是为什么首先存在错误?

子问题:

  • 如何解决?

  • 如果构建成功,如何至少暂时强制 docker 构建(这是一个家庭设置)

如果有其他有用的信息,整个构建日志:


Step 1/6 : FROM python:3.7-alpine

 ---> 39fb80313465

Step 2/6 : RUN pip install paho-mqtt logbook arrow requests ics

 ---> Running in 93d9144d6224

Collecting paho-mqtt

  Downloading https://files.pythonhosted.org/packages/25/63/db25e62979c2a716a74950c9ed658dce431b5cb01fde29eb6cba9489a904/paho-mqtt-1.4.0.tar.gz (88kB)

Collecting logbook

  Downloading https://files.pythonhosted.org/packages/6b/3f/f4e6693791efacc1282852fba5392da0649b19416b37422c5489f79a52ea/Logbook-1.5.2.tar.gz (85kB)

Collecting arrow

  Downloading https://files.pythonhosted.org/packages/cc/f5/f618f8423fe674a60461e58683edfeead93f4bbf95b9fca0e9699e765b35/arrow-0.15.2-py2.py3-none-any.whl (40kB)

Collecting requests

  Downloading https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl (57kB)

Collecting ics

  Downloading https://files.pythonhosted.org/packages/3a/66/7844baa915da9a76ef7b7b6d93935cc1474688c6ea914b90dbe54d6f6f41/ics-0.5-py2.py3-none-any.whl

Collecting python-dateutil (from arrow)

  Downloading https://files.pythonhosted.org/packages/41/17/c62faccbfbd163c7f57f3844689e3a78bae1f403648a6afb1d0866d87fbb/python_dateutil-2.8.0-py2.py3-none-any.whl (226kB)

Collecting chardet<3.1.0,>=3.0.2 (from requests)



月关宝盒
浏览 91回答 2
2回答

暮色呼如

没有看到你Dockerfile,我们无法真正看到你在做什么;但pip&nbsp;install&nbsp;arrow==0.11而不是pip install arrow应该解决眼前的问题。如果您的RUN语句中的命令与您分开,&&您可以将其更改为;您想要忽略其错误的命令之后,您可以|| true在末尾添加以使整个RUN语句始终成功;但这通常是不好的做法,在这种情况下,无论如何都不太可能产生有用的图像。

慕姐4208626

您有一个名为的模块ics,它依赖于arrow具有版本的模块<0.12,>=0.11,这些依赖项的版本是在您构建 python 模块时指定的。在构建您的 docker 映像时,它正在&nbsp;arrow 0.15.2从缓存中使用,因为它可能已经安装在您的计算机上。处理这些类型的错误的最佳方法是在一个requirements.txt文件中定义所有依赖项及其版本,然后运行pip install -r requirements.txt以一次性安装所有依赖项。我不能确定为什么你的构建失败了。您可以尝试卸载arrow模块并重新安装指定版本。
随时随地看视频慕课网APP

相关分类

Python
我要回答