Не удается установить pycosat на alpine во время докеризации - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь докеризировать приложение django, и я использую alpine: edge в качестве базового изображения.И pycosat установка завершается неудачно с ошибкой

In file included from pycosat.c:19:
picosat.c:8150:10: fatal error: sys/unistd.h: No such file or directory
 #include <sys/unistd.h>
          ^~~~~~~~~~~~~~
compilation terminated.
error: Setup script exited with error: command 'gcc' failed with exit status 1

Вот как выглядит мой Dockerfile

FROM alpine:edge
    ENV PYTHONBUFFERED 1

    RUN apk update && \
        apk add --virtual build-deps gcc python3-dev musl-dev \
        libffi-dev openssl-dev python3 py3-zmq build-base libzmq zeromq-dev \
        curl g++ make zlib-dev linux-headers openssl ca-certificates libevent-dev

    RUN pip3 install --upgrade pip setuptools
    RUN mkdir /config
    ADD /config/requirements.txt /config/
    RUN easy_install pyzmq
    RUN easy_install pycosat
    RUN mkdir /src
    WORKDIR /src

Как я могу сделать это для установки этой библиотеки?Я пропускаю некоторые пакеты или утилиты или что-то еще?

Также я использую docker-compose для сборки

1 Ответ

0 голосов
/ 19 октября 2018

Похоже, pycosat не совместим с musl, реализацией библиотеки libc, используемой в Alpine.

Заголовок unistd.h musl находится в корневой папке системных заголовков, /usr/include и не находится под /usr/include/sysкак в glibc (glibc является стандартом Linux libact по умолчанию), и поэтому компиляция завершается неудачно с fatal error: sys/unistd.h: No such file or directory.

В качестве обходного пути вы можете создать свой собственный заголовок в sys/unistd.h, который будет просто включать собственный unistd.h до этапа сборки pycosat:

RUN echo "#include <unistd.h>" > /usr/include/sys/unistd.h
...