在 docker 文件中安装 python 包 [英] Install python package in docker file
问题描述
在我的 docker 文件中,我想安装 med2image python 包(https://github.com/FNNDSC/med2image).我使用以下代码:
来自 ubuntu:16.04运行 apt-get 更新 &&apt-get install -y --no-install-recommends python3.5python3点&&apt-get clean &&
m -rf/var/lib/apt/lists/*运行 pip 安装 nibabel pydicom matplotlib 枕头运行 pip install med2image
但是当我想构建图像时出现以下错误:
下载 https://files.pythonhosted.org/packages/6f/e5/948b023c7feb72adf7dfb26d90a13c838737bbf52be704f5ddd0878e3264/med2image-1.1.2.tar.gz命令 python setup.py egg_info 的完整输出:抱歉,仅支持 Python 3.5+.--------------------------------------命令python setup.py egg_info"失败,错误代码 1 在/tmp/pip-install-FnNb_S/med2image/命令/bin/sh -c pip install med2image"返回非零代码:1
我该怎么办?!
推荐基础镜像
正如我在评论中所建议的,您可以编写一个如下所示的 Dockerfile:
FROM python:3运行 pip install --no-cache-dir --upgrade pip &&pip install --no-cache-dir nibabel pydicom matplotlib 枕头 &&pip install --no-cache-dir med2imageCMD [猫",/etc/os-release"]
上面的命令示例可以在运行时(docker build --pull -t test . && docker run --rm -it test
)确认这个镜像是基于 GNU/Linux 发行版Debian stable".
通用 Dockerfile
模板
最后给出一个全面的答案,请注意,关于 Python 依赖项的一个好的做法是在专用文本文件中以声明方式指定它们(按字母顺序,以方便查看和更新),所以对于您的示例,您可能需要编写以下文件:
<块引用>requirements.txt
matplotlibmed2image尼巴贝尔枕头pydicom
<块引用>
并使用以下通用 Dockerfile
FROM python:3工作目录/usr/src/app复制 requirements.txt ./运行 pip install --no-cache-dir --upgrade pip &&pip install --no-cache-dir -r requirements.txt复制 ..CMD [python"、./your-daemon-or-script.py"]
更准确地说,这是Docker官方镜像文档中建议的方法蟒蛇
,§.如何使用这个图像
In my docker file, I want to install med2image python package (https://github.com/FNNDSC/med2image). I use the following code:
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y --no-install-recommends
python3.5
python3-pip
&&
apt-get clean &&
rm -rf /var/lib/apt/lists/*
RUN pip install nibabel pydicom matplotlib pillow
RUN pip install med2image
But I get the following error when I want to build the image:
Downloading https://files.pythonhosted.org/packages/6f/e5/948b023c7feb72adf7dfb26d90a13c838737bbf52be704f5ddd0878e3264/med2image-1.1.2.tar.gz
Complete output from command python setup.py egg_info:
Sorry, only Python 3.5+ is supported.
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-FnNb_S/med2image/
The command '/bin/sh -c pip install med2image' returned a non-zero code: 1
What should I do?!
Recommended base image
As suggested in my comment, you could write a Dockerfile that looks like:
FROM python:3
RUN pip install --no-cache-dir --upgrade pip &&
pip install --no-cache-dir nibabel pydicom matplotlib pillow &&
pip install --no-cache-dir med2image
CMD ["cat", "/etc/os-release"]
And the command example above could confirm at runtime (docker build --pull -t test . && docker run --rm -it test
) that this image is based on the GNU/Linux distribution "Debian stable".
Generic Dockerfile
template
Finally to give a comprehensive answer, note that a good practice regarding Python dependencies consists in specifying them in a declarative way in a dedicated text file (in alphabetical order, to ease review and update) so that for your example, you may want to write the following file:
requirements.txt
matplotlib
med2image
nibabel
pillow
pydicom
and use the following generic
Dockerfile
FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir --upgrade pip &&
pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./your-daemon-or-script.py" ]
To be more precise, this is the approach suggested in the documentation of the Docker official image python
, §. How to use this image
这篇关于在 docker 文件中安装 python 包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!