docker build错误:由于EnvironmentError无法安装软件包:[Errno 2]

时间:2020-07-07 18:19:56

标签: django docker

当我在处理需求文件的同时运行docker build时遇到此错误。

ERROR: Could not find a version that satisfies the requirement mkl-fft==1.0.6 (from -r /requirements.txt (line 44)) (from versions: none)
ERROR: No matching distribution found for mkl-fft==1.0.6 (from -r /requirements.txt (line 44))
The command '/bin/sh -c pip install -r /requirements.txt' returned a non-zero code: 1

建议?

Dockerfile:

FROM python:3.6-alpine
MAINTAINER My Project

ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt

RUN mkdir /app
WORKDIR /app
COPY . /app

RUN adduser -D user
USER user

requirements.txt:

asgiref==3.2.10
certifi==2020.6.20
cffi==1.14.0
chardet==3.0.4
click==7.1.2
cymem==2.0.3
cytoolz==0.9.0.1
dill==0.2.9
Django==3.0.7
djangorestframework==3.11.0
en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz
gunicorn==20.0.4
idna==2.10
intervaltree==3.0.2
joblib==0.15.1
msgpack==0.6.1
msgpack-numpy==0.4.3.2
murmurhash==1.0.2
nltk==3.5
numpy==1.15.4
plac==0.9.6
preshed==2.0.1
pycparser==2.20
pyOpenSSL==19.1.0
pyreadline==2.1
PySocks==1.7.1
python-dateutil==2.8.1
pytz==2020.1
regex==2020.6.8
requests==2.24.0
six==1.15.0
sortedcontainers==2.2.2
spacy==2.0.16
SQLAlchemy==1.3.18
sqlparse==0.3.1
thinc==6.12.1
toolz==0.10.0
tqdm==4.47.0
ujson==3.0.0
urllib3==1.25.9
win-inet-pton==1.1.0
wincertstore==0.2
wrapt==1.10.11
mkl-fft==1.0.6
mkl-random==1.0.1
brotlipy==0.7.0
cryptography==2.9.2
pandas==1.0.5
psycopg2==2.8.4
TBB==0.1

https://stackoverflow.com/users/5666087/jakub的帮助下,我已将Dockerfile更改为使用映像FROM continuumio/miniconda3:4.8.2

我已将需求文件更改为:

asgiref==3.2.10
certifi==2020.6.20
cffi==1.14.0
chardet==3.0.4
click==7.1.2
cymem==2.0.3
cytoolz==0.9.0.1
dill==0.2.9
Django==3.0.7
djangorestframework==3.11.0
en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz
gunicorn==20.0.4
idna==2.10
intervaltree==3.0.2
joblib==0.15.1
msgpack==0.6.1
msgpack-numpy==0.4.3.2
murmurhash==1.0.2
nltk==3.5
numpy==1.15.4
plac==0.9.6
preshed==2.0.1
pycparser==2.20
pyOpenSSL==19.1.0
pyreadline==2.1
PySocks==1.7.1
python-dateutil==2.8.1
pytz==2020.1
regex==2020.6.8
requests==2.24.0
six==1.15.0
sortedcontainers==2.2.2
spacy==2.0.16
SQLAlchemy==1.3.18
sqlparse==0.3.1
thinc==6.12.1
toolz==0.10.0
tqdm==4.47.0
ujson==3.0.0
urllib3==1.25.9
win-inet-pton==1.1.0
wincertstore==0.2
wrapt==1.10.11
brotlipy==0.7.0
cryptography==2.9.2
pandas==1.0.5
tbb
psycopg2-binary==2.8.5
mkl-fft
mkl-random

我留下了错误:

ERROR: Could not find a version that satisfies the requirement mkl-fft (from -r /requirements.txt (line 49)) (from versions: none)
ERROR: No matching distribution found for mkl-fft (from -r /requirements.txt (line 49))
The command '/bin/sh -c pip install -r /requirements.txt' returned a non-zero code: 1

2 个答案:

答案 0 :(得分:1)

错误

ERROR: Could not find a version that satisfies the requirement mkl-fft==1.0.6 (from -r /requirements.txt (line 44)) (from versions: none)
ERROR: No matching distribution found for mkl-fft==1.0.6 (from -r /requirements.txt (line 44))
The command '/bin/sh -c pip install -r /requirements.txt' returned a non-zero code: 1

之所以发生,是因为您在尝试安装许多Linux轮文件(它们是glibc)时使用了基于Alpine的映像(使用MUSL而不是glibc)(请参见https://github.com/docker-library/docs/issues/904)。解决此问题的一种简单方法是使用基于Debian的python:3.6-slim

但是,requests.txt文件中还有其他问题。您将必须安装编译器(例如gcc)才能安装cytoolz和其他一些软件包。

如果您不想编译软件包,则可以查看miniconda3码头工人镜像(https://hub.docker.com/r/continuumio/miniconda3)。那个程序包管理器附带了预编译的程序包。

答案 1 :(得分:0)

这是因为最新的 The idea behind this change is to reduce global static IP usage and to encourage users to use private VM instances (without static external IP) and expose them to the outside via Cloud NAT, thus reducing the attack surface. 库与 mkl-fft 您的 Python 版本不兼容。 将版本保留在 requirements.txt 中,因此 python:3.6-alpine

以更一般的方式,对于任何其他库: 你有两个选择。

  1. 寻找支持您当前 mkl-fft==1.0.6 的另一个版本的库。
  2. 更改您的 Python 版本以找出存在问题的另一个库。