无法在Docker容器中安装任何python软件包

时间:2019-11-15 05:13:45

标签: python docker

我正在尝试创建一个以ubutu 16.04为基础的docker镜像。我想安装一些python软件包,例如pandas,flask等。我将所有软件包保留在“ requirements.txt”中。但是当我尝试建立形象时,我得到了

Could not find a version that satisfies the requirement requests (from -r requirements.txt (line 1)) (from versions: )
No matching distribution found for requests (from -r requirements.txt (line 1))

基本上,我没有在“ requirements.txt”中提到任何版本。我猜应该使用该软件包的最新可用版本和兼容版本。但是对于每个包装,我都会遇到同样的问题。

我的DockerFile如下。

FROM ubuntu:16.04

RUN apt-get update -y && \
    apt-get install -y python3-pip python3-dev build-essential cmake pkg-config libx11-dev libatlas-base-dev

# We copy just the requirements.txt first to leverage Docker cache
COPY ./requirements.txt /testing/requirements.txt

WORKDIR /testing

RUN pip3 install -r requirements.txt

和requirements.txt是

pandas
requests
PyMySQL
Flask
Flask-Cors
Pillow
face-recognition
Flask-SocketIO

我在哪里做错了?有人可以帮忙吗?

3 个答案:

答案 0 :(得分:4)

我也遇到了同样的情况。我观察到,python软件包正在docker中寻找网络。认为它在没有网络的独立环境中运行,因此无法找到该软件包。在这种情况下

  

没有找到匹配的分布

有时

  

正在重试...

可能会发生错误。

我在如下所示的docker build命令中使用了-network 选项,以克服此错误,该命令坚持要求python使用主机网络下载所需的软件包。

  

docker build --network = host -t tracker:latest。

答案 1 :(得分:0)

尝试使用此:

  

运行python3.6 -m pip install --upgrade pip \
      && python3.6 -m pip install -r requirements.txt

通过这种方式使用它,您可以指定要在其中搜索这些软件包的python版本。

如果要使用3.7版本,请将其更改为python3.7。

答案 2 :(得分:0)

我建议使用官方的python图片。结果,您的Dockerfile现在将变为:

FROM python:3

WORKDIR /testing
COPY ./requirements.txt /testing/requirements.txt

RUN pip install --no-cache-dir -r requirements.txt

... etc ...

现在重新:角度/节点。您可以从此处获得两个选择:1)在Python映像上安装Angular / Node;或2)使用Docker的multi-stage build feature,以便在将它们合并在一起之前先构建Angular和Python特定的图像。建议使用选项2,但需要一些工作。可能看起来像这样:

FROM node:8 as node

# Angular-specific build

FROM python:3 as python

# Python-specific build

# Then copy your data from the Angular image to the Python one:
COPY --from=node /usr/src/app/dist/angular-docker /usr/src/app