Docker -композиция не может импортировать Django (ModuleNotFoundError) - PullRequest
1 голос
/ 29 марта 2020

Я очень плохо знаком с Docker, и я пытался заставить очень простую программу 'Hello World' работать на docker. Независимо от того, что я делаю, я всегда получаю:

ModuleNotFoundError: Нет модуля с именем 'Django'

Что я делаю не так?

Вот выходной терминал.

C:\path\to\app\root>docker-compose up
Creating network "hello-world_default" with the default driver
Creating hello-world_web_1 ... done                                                                                     Attaching to hello-world_web_1
web_1  | Traceback (most recent call last):
web_1  |   File "/code/manage.py", line 10, in main
web_1  |     from django.core.management import execute_from_command_line
web_1  | ModuleNotFoundError: No module named 'django'
web_1  |
web_1  | The above exception was the direct cause of the following exception:
web_1  |
web_1  | Traceback (most recent call last):
web_1  |   File "/code/manage.py", line 21, in <module>
web_1  |     main()
web_1  |   File "/code/manage.py", line 16, in main
web_1  |     ) from exc
web_1  | ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?
hello-world_web_1 exited with code 1

Вот файл Docker

# Pull base image
FROM python:3.7

# Set environmental variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Set work directory
WORKDIR /code

# Install dependencies
COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv && pipenv install --system

# Copy project 
COPY . /code/

А вот файл docker -compose.yml:

version: '3.7'
services:
  web:
    build: .
    command: python /code/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - 8000:8000

Редактировать

Это содержание моего pipfile:

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
pytz = "==2019.3"
sqlparse = "==0.3.1"
Django = "==2.2.7"

[requires]
python_version = "3.7"

1 Ответ

0 голосов
/ 29 марта 2020

вместо

COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv && pipenv install --system

вы можете использовать:

RUN pip install pipenv
COPY pipfile* /tmp
RUN cd /tmp && pipenv lock --requirements > requirements.txt
RUN pip install -r /tmp/requirements.txt

это фрагмент из здесь

...