python-dotenv icon indicating copy to clipboard operation
python-dotenv copied to clipboard

load_dotenv does not work with variables in values

Open arojoal opened this issue 1 month ago • 1 comments

I have a .env file with this variables similar to those explained in the library README:

# Development settings
DOMAIN=example.org
ADMIN_EMAIL=admin@${DOMAIN}
ROOT_URL=${DOMAIN}/app

# base work directory
WORKDIR=/workdir_shared

# logdir
LOGDIR=${WORKDIR}/logs

When I run this script I see that the values of variables ${DOMAIN} and ${WORKDIR} are not applied. I get:

DOMAIN: example.org
ROOT_URL: ${DOMAIN}/app
ADMIN_EMAIL: admin@${DOMAIN}
WORKDIR: /workdir_shared
LOGDIR: ${WORKDIR}/logs

Whe it should be:

DOMAIN: example.org
ROOT_URL: example.org/app
ADMIN_EMAIL: [email protected]
WORKDIR: /workdir_shared
LOGDIR: workdir_shared/logs

What can be wrong?

This is the script code:

import os
from dotenv import load_dotenv


load_dotenv(verbose=True, interpolate=True)

print("DOMAIN:", os.getenv("DOMAIN"))
print("ROOT_URL:", os.getenv("ROOT_URL"))
print("ADMIN_EMAIL:", os.getenv("ADMIN_EMAIL"))
print("WORKDIR:", os.getenv("WORKDIR"))
print("LOGDIR:", os.getenv("LOGDIR"))

I tried with "load_dotenv()" with same result.

arojoal avatar Nov 30 '25 16:11 arojoal

Try writing the environment state before calling load_dotenv. My suspicion is you have some other machinery that loaded the environment without the interpolation. Then, when you call load_dotenv, the variables are already set and load_dotenv does not override them if you do not specify override=True.

If I remember correctly, VS Code terminal or some plugin loads .env files and sets up the environment for you. There was a bunch of issues resulting from this behaviour in here.

Bajron avatar Dec 01 '25 19:12 Bajron