ValueError:更新环境时没有足够的值可解压缩(预期为2,得到1)

时间:2018-08-28 07:19:54

标签: python django

我正在使用环境键进行更好的设置配置。最初,我遇到以下错误

django.core.exceptions.ImproperlyConfigured: Set the DATABASE_URL environment variable

因此,我在google中搜索并找到了以下解决方案

settings / base.py

import os

with open('.envs/.local/.postgres') as fh:
    os.environ.update(line.strip().split('=', 1) for line in fh)

但是,这也给我一个错误。我得到

ValueError: not enough values to unpack (expected 2, got 1)

.postgres和.django如下所示

.django

# General
# ------------------------------------------------------------------------------
export USE_DOCKER=yes

# Email
# DJANGO_EMAIL_BACKEND

# Redis
# ------------------------------------------------------------------------------
export REDIS_URL=redis://redis:6379/0

# Celery
# ------------------------------------------------------------------------------
# CELERY_BROKER_URL=
# CELERY_RESULT_BACKEND = 'django-cache'

# Flower
export CELERY_FLOWER_USER=debug
export CELERY_FLOWER_PASSWORD=debug

.postgres

# PostgreSQL
# ------------------------------------------------------------------------------
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=database
POSTGRES_USER=username
POSTGRES_PASSWORD=password
DATABASE_URL=postgres://username:password@localhost:5432/app

1 个答案:

答案 0 :(得分:1)

显然不是.envs/.local/.postgres中的每一行都有一个=字符,因此split('=', 1)只会在它为该行输出的元组中导致一项,而dict.update期望有两项迭代器输出中每个元组的项目。

您应确保生成器表达式中的行中有一个=字符:

os.environ.update(line.strip().split('=', 1) for line in fh if '=' in line)

编辑:现在,您已经用一个附加的.django文件更新了问题,该文件在环境变量设置之前有一个额外的关键字export,现在应该查找此关键字并将其删除如果存在:

os.environ.update((line.split(maxsplit=1)[1] if line.startswith('export ') else line).strip().split('=', 1) for line in fh if '=' in line)