Xen*_*mar 13 python django python-imaging-library docker
我有一个 dockerized django 应用程序,我想投入生产。但是自从我添加了一个 Imagefield Pillow 之后,我就很难在 Docker 容器中安装 Pillow。
据我了解,添加依赖项 jpeg-dev ibjpeg & zlib-dev 应该足以用于 django (?)。使用下面的配置我收到错误:
错误runserver:
product.Product.image: (fields.E210) Cannot use ImageField because Pillow is not installed.
HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "pip install Pillow".
product.Product.thumbnail: (fields.E210) Cannot use ImageField because Pillow is not installed.
HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "pip install Pillow".
Run Code Online (Sandbox Code Playgroud)
如果我将 Pillow 添加到 requirements.txt(或放入pip install PillowDockerfile),我会在尝试构建容器时收到更长的错误消息。
不放入pip install PillowDockerfile 或 requirements.txt - 这是我的配置。
Dockerfile:
# pull official base image
FROM python:3.7-alpine
# set environment varibles
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# set work directory
WORKDIR /usr/src/kitschoen-dj
RUN pip install --upgrade pip
# install psycopg2
RUN apk update \
&& apk add --virtual build-deps gcc python3-dev musl-dev \
&& apk add postgresql \
&& apk add postgresql-dev \
&& pip install psycopg2 \
&& apk del build-deps
&& apk add jpeg-dev \
&& apk add libjpeg \
&& apk add zlib-dev
# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/kitschoen-dj/requirements.txt
RUN pip install -r requirements.txt
# copy entrypoint.sh
COPY ./entrypoint.sh /usr/src/kitschoen-dj/entrypoint.sh
# copy project
COPY . /usr/src/kitschoen-dj/
# run entrypoint.sh
ENTRYPOINT ["/usr/src/kitschoen-dj/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)
需求.txt
astroid==2.1.0
certifi==2018.11.29
chardet==3.0.4
Django==2.1.7
django-cors-headers==2.4.0
django-filter==2.1.0
djangorestframework==3.9.1
djangorestframework-simplejwt==3.3
gunicorn==19.9.0
httpie==1.0.2
httpie-jwt-auth==0.3.0
idna==2.8
isort==4.3.4
lazy-object-proxy==1.3.1
Markdown==3.0.1
mccabe==0.6.1
PyJWT==1.7.1
requests==2.21.0
six==1.12.0
urllib3==1.24.1
wrapt==1.11.1
Run Code Online (Sandbox Code Playgroud)
我已经坚持了一段时间。有人可以帮忙吗?
Xen*_*mar 37
对于任何对我有用的东西感兴趣的人。
我的问题有很多方面 - 一个是我在 docker 和 Ubuntu 方面做得并不好。
但这里有一些见解:安装 Pillow 将需要几个依赖项。据我所知,你需要:gcc python3-dev jpeg-dev zlib-dev
为了防止这些依赖项最终出现在最终镜像中(保持镜像大小较小),您可以在虚拟包中安装一些(不是全部!)它们,并在安装 Pillow 后删除它们(这些依赖项称为构建依赖项 - 仅需要)在构建期间)。
所以这是对我有用的代码:
RUN apk update \
&& apk add --virtual build-deps gcc python3-dev musl-dev \
&& apk add postgresql \
&& apk add postgresql-dev \
&& pip install psycopg2 \
&& apk add jpeg-dev zlib-dev libjpeg \
&& pip install Pillow \
&& apk del build-deps
Run Code Online (Sandbox Code Playgroud)
(Pillow 不需要某些东西,例如 postgressql、postgresql-dev) - 如您所见,我将构建依赖项安装在名为build-deps. 之后,我正在安装 Pillow,最后我将删除构建依赖项。
我认为,这也是@LinPy 提出的解决方案,我只是想解释一下这个非常冗长的内容以最终帮助他人。
apk add --virtual 命令的 .build-deps 是什么?
Lin*_*nPy 18
将此添加到您的Dockerfile:
RUN apk add --no-cache jpeg-dev zlib-dev
RUN apk add --no-cache --virtual .build-deps build-base linux-headers \
&& pip install Pillow
Run Code Online (Sandbox Code Playgroud)
来源:Github
小智 6
我刚刚将这些行添加到我的 Dockerfile 中并且它起作用了
RUN apk add --update --no-cache --virtual .tmp gcc libc-dev linux-headers
RUN apk add --no-cache jpeg-dev zlib-dev
RUN apk del .tmp
Run Code Online (Sandbox Code Playgroud)
我的 Dockerfile(使用 python:3.8-alpine):
COPY ./requirements.txt /requirements.txt
RUN apk add --update --no-cache --virtual .tmp gcc libc-dev linux-headers
RUN apk add --no-cache jpeg-dev zlib-dev
RUN pip install -r /requirements.txt
RUN apk del .tmp
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10975 次 |
| 最近记录: |