Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django、Docker、Python-无法在Python上安装枕头_Python_Django_Docker_Python Imaging Library - Fatal编程技术网

Django、Docker、Python-无法在Python上安装枕头

Django、Docker、Python-无法在Python上安装枕头,python,django,docker,python-imaging-library,Python,Django,Docker,Python Imaging Library,我有一个停靠的django应用程序,我想投入生产。但自从我添加了Imagefield枕头之后,我就很难在Docker容器中安装枕头 据我所知,添加依赖项jpeg-dev-ibjpeg&zlib-dev对于django(?)应该足够了。通过以下配置,我收到错误信息: runserver上的错误: product.Product.image: (fields.E210) Cannot use ImageField because Pillow is not installed. HINT:

我有一个停靠的django应用程序,我想投入生产。但自从我添加了Imagefield枕头之后,我就很难在Docker容器中安装枕头

据我所知,添加依赖项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".
# 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"]
如果我将Pillow添加到requirements.txt(或将
pip install Pillow
放在Dockerfile中),我在尝试构建容器时会收到更长的错误消息。

不在Dockerfile或requirements.txt中放置
pip安装枕
-这是我的配置

Dockerfile:

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".
# 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"]
Requirements.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

我已经被这件事困扰了一段时间了。有人能帮忙吗?

将此添加到您的
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

资料来源:

任何对我的工作感兴趣的人

我的问题有很多方面——其中一个是我在docker和Ubuntu方面做得并不好


但这里有一些见解:安装枕头需要几个依赖项。据我所知,您需要:
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
(有些东西不是枕头所必需的,例如postgressql、postgresql dev)-正如您所看到的,我在一个名为
build deps
的虚拟包中安装了构建依赖项。之后,我将安装Pillow,并在最后删除构建依赖项

我想,这也是@LinPy提出的解决方案,我只是想解释一下这个非常冗长的问题,最终帮助他人


我刚刚将这些行添加到我的Dockerfile中,它起了作用

RUN apk add --update --no-cache --virtual .tmp gcc libc-dev linux-headers<br>
RUN apk add --no-cache jpeg-dev zlib-dev<br>
RUN apk del .tmp
运行apk add--update--no cache--virtual.tmp gcc libc dev linux头
运行apk add--无缓存jpeg dev zlib dev
运行apk del.tmp

我的Dockerfile(使用python:3.8-alpine):

复制./requirements.txt/requirements.txt
运行apk add--update--no cache--virtual.tmp gcc libc dev linux headers
运行apk add--无缓存jpeg dev zlib dev
运行pip安装-r/requirements.txt
运行apk del.tmp
谢谢你的意见,让我找到了正确的方向!不是说你的解决方案不起作用。。。但它增加了大约120MB的图像大小,这是相当多的。没错,我认为你的解决方案是正确的。我错过了什么(因为我仍然在学习很多东西,所以我必须在以后的步骤中删除.build-dep,以使它们不会出现在映像中。但是我喜欢使用元包build-base。我会记住这一点。Pillow需要zlib-dev和jpeg-dev作为构建依赖项,可以删除。但是在运行时还需要libjpeg。因此,您可以ld对最小映像使用类似的内容:
运行apk add--update--no cache--virtual.tmp gcc libc dev linux headers zlib dev jpeg dev&&apk add libjpeg&&pip install Pillow--no cache dir&&apk del.tmp
为什么这里有postgresql?Pillow需要它吗?“据我所知,你需要…”请阅读原始帖子。此外,我在帖子中写道:“(一些东西不是枕头所需的,例如postgressql、postgresql开发工具)”