pipenv - системная опция для докера. Каков рекомендуемый способ получить все пакеты Python в Docker? - PullRequest
0 голосов
/ 08 марта 2019

Я использую pipenv для моего django приложения.

$ mkdir djangoapp && cd djangoapp
$ pipenv install django==2.1
$ pipenv shell
(djangoapp) $ django-admin startproject example_project .
(djangoapp) $ python manage.py runserver

Теперь я перехожу к среде докера.

Согласно моему пониманию pipenv устанавливает пакеты только внутриvirtualenv

Вам не нужен виртуальный env внутри контейнера, docket-контейнер сам по себе является виртуальной средой.

Позже, пройдя через множество Dockerfile 'si обнаружил --system параметр для установки в системе.

Например, я нашел следующее:

https://testdriven.io/blog/dockerizing-django-with-postgres-gunicorn-and-nginx/

COPY ./Pipfile /usr/src/app/Pipfile
RUN pipenv install --skip-lock --system --dev

https://hub.docker.com/r/kennethreitz/pipenv/dockerfile

# -- Install dependencies:
ONBUILD RUN set -ex && pipenv install --deploy --system

https://wsvincent.com/beginners-guide-to-docker/

# Set work directory
WORKDIR /code

# Copy Pipfile
COPY Pipfile /code

# Install dependencies
RUN pip install pipenv
RUN pipenv install --system

Так что --system достаточно или --deploy --system - лучший способ.И --skip-lock --system --dev, что опять по-другому.

Так может кто-нибудь подсказать, как вернуть мою среду обратно в мой докер

1 Ответ

1 голос
/ 08 марта 2019

Типичное развертывание Docker подразумевает наличие requirements.txt (это файл, в котором вы можете хранить ваши пип-зависимости, включая сам Django ), а затем в вашем Dockerfile вы делаете что-то вроде:

FROM python:3.7  # or whatever version you need
ADD requirements.txt /code/
WORKDIR /code
# install your Python dependencies
RUN pip install -r requirements.txt
# run Django
CMD [ "python", "./manage.py", "runserver", "0.0.0.0:8000"]

Вам вообще не нужно pipenv здесь, поскольку у вас больше нет виртуальной среды, как вы говорите.

Еще лучше, если вы сконфигурируете множество таких вещей в файле docker-compose.yml, а затем используйте docker-compose для запуска и управления вашими службами, а не только для Django.

Docker имеет очень хороший учебник по докеризации Django с ним. И если вы не уверены, что происходит в самом Dockerfile, проверьте руководство .

...