AttributeError: модуль 'dotenv' не имеет атрибута 'dotenv_values'

Я установил django-environ и пытаюсь получить свои значения из .env. У меня нет проблем, когда я запускаю сервер локально, но когда я запускаю свое приложение с docker-compose up --build у меня возникает ошибка:

Traceback (most recent call last):
  File "/usr/bin/docker-compose", line 33, in <module>
    sys.exit(load_entry_point('docker-compose==1.29.2', 'console_scripts', 'docker-compose')())
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 81, in main
    command_func()
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 200, in perform_command
    project = project_from_options('.', options)
  File "/usr/lib/python3/dist-packages/compose/cli/command.py", line 60, in project_from_options
    return get_project(
  File "/usr/lib/python3/dist-packages/compose/cli/command.py", line 148, in get_project
    config_data = config.load(config_details, interpolate)
  File "/usr/lib/python3/dist-packages/compose/config/config.py", line 442, in load
    service_dicts = load_services(config_details, main_file, interpolate=interpolate)
  File "/usr/lib/python3/dist-packages/compose/config/config.py", line 558, in load_services
    return build_services(service_config)
  File "/usr/lib/python3/dist-packages/compose/config/config.py", line 537, in build_services
    return sort_service_dicts([
  File "/usr/lib/python3/dist-packages/compose/config/config.py", line 538, in <listcomp>
    build_service(name, service_dict, service_names)
  File "/usr/lib/python3/dist-packages/compose/config/config.py", line 526, in build_service
    service_dict = finalize_service(
  File "/usr/lib/python3/dist-packages/compose/config/config.py", line 947, in finalize_service
    service_dict['environment'] = resolve_environment(service_dict, environment, interpolate)
  File "/usr/lib/python3/dist-packages/compose/config/config.py", line 732, in resolve_environment
    env.update(env_vars_from_file(env_file, interpolate))
  File "/usr/lib/python3/dist-packages/compose/config/environment.py", line 38, in env_vars_from_file
    env = dotenv.dotenv_values(dotenv_path=filename, encoding='utf-8-sig', interpolate=interpolate)
AttributeError: module 'dotenv' has no attribute 'dotenv_values'

У меня есть мой .env файл:

SECRET_KEY="django-insecure-t+)^5*1syzvs=p%tiy324)zxz26$ra!+__8)y8=!hnyjn_cg3m"

Мой docker-compose:

version: "3.10"
services:
  postgres:
    image: postgres:13.3
    env_file:
      - ./support/.env
    volumes:
      - .:/docker-entrypoint-initdb.d
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U alexey_razmanov -d support_app_db"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 4G
  web:
    build: .
    command: bash -c "make full-migrate-and-run"
    ports:
      - "8000:8000"
    env_file:
      - ./support/.env
    volumes:
      - .:/support
    depends_on:
      - postgres
      - redis
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
  celery:
    restart: always
    build:
      context: .
    command: bash -c "cd support && celery -A support worker -l info"
    env_file:
      - ./support/.env
    depends_on:
      - postgres
      - redis
      - web

Мой Dockerfile:

FROM python:3.10 as prod

ENV PYTHONUNBUFFERED=1 \
    POETRY_HOME=/opt/poetry \
    POETRY_VIRTUALENVS_CREATE="false"

ENV PATH="${POETRY_HOME}/bin:$PATH"

WORKDIR /app

RUN apt update && \
    apt install make

COPY Makefile poetry.lock pyproject.toml /app/

RUN curl -sSL https://install.python-poetry.org | python3 -

RUN make install-prod

COPY support /app/support

CMD make make-migrations && make migrate && make run-app

В settings.py:

 import environ
    
 env = environ.Env(DEBUG=(bool, False))
    
 BASE_DIR = Path(__file__).resolve().parent.parent
 environ.Env.read_env(os.path.join(BASE_DIR, ".env"))
 SECRET_KEY = env("SECRET_KEY")

Я пробовал использовать пакет python-dotenv, poetry-dotenv, dotenv, load_env и все они выдают мне эту ошибку.

У меня та же проблема, что и у вас, когда у меня следующие условия

  • Я использую Arch Linux
  • .
  • У меня есть pyenv, использующий несколько версий Python
  • У меня docker-compose установлен с помощью pip из разных версий Python

Решение

  • Удалите все docker-compose, установленные через pip во всех версиях Python, затем установите docker-compose, предоставленный AUR в моем случае yay -S docker-compose. Тада! Теперь все работает.
Вернуться на верх