У меня есть многоэтапный Dockerfile, где я создаю колеса для зависимостей моего проекта в изображении python
, затем копирую колеса в альпийское изображение и выполняю pip install -r ./wheels/requirements.txt --find-links ./wheels
.
Кажется, он устанавливается с большинства колес, за исключением некоторых типов, таких как numpy
, spacy
и gensim
, где он достигает целых rnet, чтобы собрать их молнии / гудроны. Почему pip не может найти ссылки для них? Колеса есть. Обычно это что угодно, но установка этих deps на alpine занимает очень много времени .
Вот мой Dockerfile:
FROM python:3.6.10 as builder
ENV PYTHONUNBUFFERED 1
WORKDIR /wheels
COPY ./requirements.txt /wheels/
RUN pip install -U pip \
&& pip wheel -r ./requirements.txt
FROM python:3.6.10-alpine
ENV PYTHONUNBUFFERED=1
RUN apk update
RUN apk add --no-cache \
--upgrade \
--repository http://dl-cdn.alpinelinux.org/alpine/edge/main \
make \
automake \
gcc \
g++ \
subversion \
python3-dev \
gettext \
libpq \
postgresql-client \
&& rm -rf /var/cache/apk/*
COPY --from=builder /wheels /wheels
RUN pip install -U pip \
&& pip install -r ./wheels/requirements.txt --find-links ./wheels \
&& rm -rf /wheels \
&& rm -rf /root/.cache/pip/*
WORKDIR /app
COPY ./ /app
COPY ./docker/entrypoint.sh /
ENTRYPOINT [ "/entrypoint.sh" ]
И мои требования.txt:
asgiref==3.2.3
Django==3.0.2
luhn==0.2.0
nltk==3.4.5
numpy==1.18.1
psycopg2==2.8.4
pytest==5.3.5
pytz==2019.3
spacy==2.2.3
sqlparse==0.3.0
yapf==0.29.0
gensim==3.8.1
Вот пример выходных данных журнала:
Looking in links: ./wheels
Processing /wheels/asgiref-3.2.3-py2.py3-none-any.whl
Processing /wheels/Django-3.0.2-py3-none-any.whl
Processing /wheels/luhn-0.2.0-py3-none-any.whl
Processing /wheels/nltk-3.4.5-py3-none-any.whl
Collecting numpy==1.18.1
Downloading numpy-1.18.1.zip (5.4 MB)
Installing build dependencies: started
Installing build dependencies: finished with status 'done'
Getting requirements to build wheel: started
Getting requirements to build wheel: finished with status 'done'
Preparing wheel metadata: started
Preparing wheel metadata: finished with status 'done'
Processing /wheels/psycopg2-2.8.4-cp36-cp36m-linux_x86_64.whl
Processing /wheels/pytest-5.3.5-py3-none-any.whl
Processing /wheels/pytz-2019.3-py2.py3-none-any.whl
Collecting spacy==2.2.3
Downloading spacy-2.2.3.tar.gz (5.9 MB)
По сути, я хочу, чтобы numpy
и spacy
обрабатывались как Django, а остальные команды прямо с колеса.