При отладке внутри vscode модуль с именем 'django' отсутствует, даже если установлен django

Я пытаюсь отладить свое приложение django внутри контейнера docker. В файле требований я указал следующее:

requirements.txt

Django==3.2.5
psycopg2-binary==2.9.1
djangorestframework==3.12.4
django-rest-swagger==2.2.0

Dockerfile

FROM python:3.9.6-bullseye

ENV PYTHONUNBUFFERED 1

WORKDIR /my_project

COPY ./my_project/requirements.txt /my_project/requirements.txt
RUN pip install -r requirements.txt

EXPOSE 8000

COPY ./entrypoint.sh /entrypoint.sh
RUN ["chmod", "+x", "/entrypoint.sh"]

ENTRYPOINT /entrypoint.sh

Кроме того, когда я проверил, атаковав vscode в docker-контейнер и запустив pip, он показал, что django действительно установлен:

# pip list | grep Django
Django              3.2.5

Однако я все равно получаю ошибку:

ModuleNotFoundError: No module named 'django'

Вот скриншот ошибки, показывающий исключение, поднятое в режиме отладки, файл launch.json и вывод pip list | grep Django: enter image description here

PS: Я использую docker compose для запуска контейнеров.

Спасибо @TimRoberts за подсказку в комментарии. Мне кажется, что на самом деле не нужно создавать / выбирать виртуальное окружение внутри docker. Docker сам по себе используется для создания песочницы для всех зависимостей. Создание песочницы внутри песочницы не имеет смысла, на мой взгляд.

Я был озадачен тем, что получал один и тот же путь для python и python3:

# which python
/usr/local/bin/python

# which python3
/usr/local/bin/python3

И кажется, что pip и pip3 соответствовали этим установкам:

# which pip
/usr/local/bin/pip

# which pip3
/usr/local/bin/pip3

Но потом я прочитал комментарий Тима и сразу же начал искать дополнительную подсказку, и нашел ее в правом нижнем углу vscode:

enter image description here

При нажатии на версию python на панели задач vscode появилась еще одна установка:

enter image description here

Было выбрано

Earlier /usr/bin/python3. Не знаю, как этот питон был установлен. Но выбор /usr/local/bin/python заставил его работать.

Да, нажатие на эту кнопку было первым, что я обычно делал. Но это как-то вылетело из головы, возможно, излишняя уверенность в том, что я установил только один питон в этой среде докера и даже which python и which python3 показывали один и тот же питон, заставила меня вскоре отказаться.

Вернуться на верх