【问题标题】:Cannot install some of requirements.txt python dependencies无法安装一些 requirements.txt python 依赖项
【发布时间】:2021-04-04 05:32:10
【问题描述】:

我不知道为什么从 requirements.txt pip 安装我的 python 依赖项时没有抱怨,但是当我从 docker 容器中安装时,我收到以下错误消息:

requirements.txt 内容:

Flask~=1.1
grpcio
grpcio-tools
protobuf
iexfinance
numpy
pandas
pandas_datareader
pymongo

我创建了如下容器:

docker run -it -p 8080:50051 -v ${pwd}:/app -w "/app" python:3.8-alpine

我尝试使用以下命令安装我的依赖项:

pip install -r requirements.txt

下面是一些截图:

【问题讨论】:

标签: python docker pip


【解决方案1】:

Alpine Linux 使用 musl C,但大多数 python Wheel 文件都是为 glib C 编译的。因此,需要编译具有 C/C++ 编写的扩展名的包。如果没有安装编译器,会报错。

我建议使用不基于 Alpine 的 python Docker 映像,而不是安装包在编译时可能需要的编译器和依赖项。例如,您可以使用python:3.8-slimpython:3.8,并且无需编译附带Linux 轮子的python 包。如果使用python:3.8-slim,OP 的requirements.txt 中列出的所有软件包都可以从预编译的轮子中安装。

所以你可以使用这些命令

docker run -it -p 8080:50051 -v ${pwd}:/app -w "/app" python:3.8-slim
pip install -r requirements.txt

如果您担心生成图像的大小,也可以使用pip install 中的--no-cache-dir 标志来禁用缓存。

【讨论】:

  • 这解决了我的问题,但我必须从容器内部安装要求。谢谢。
【解决方案2】:

解决方案是更新 alpine-SDK,它是一个“元包”,可引入用于构建新包的基本包。”

apk add --update alpine-sdk

我在这里找到了解决方案:

Github: docker alpine issues

【讨论】:

  • 如果你使用 alpine 的小尺寸,安装这个元包会破坏这个目的。
猜你喜欢
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 2014-05-13
  • 2018-10-27
  • 2019-01-10
  • 2021-04-11
  • 2017-05-18
相关资源
最近更新 更多