为何应用无法读取.env文件?附目录截图及数据库连接代码
问题:应用无法读取.env文件导致数据库连接失败
我的工作目录根目录下包含.env文件、app文件夹及其他项目文件,但使用以下代码连接PostgreSQL数据库时,无法读取.env中的配置信息,导致连接失败:
import os from dotenv import load_dotenv from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker load_dotenv() DB_USER = os.getenv("DB_USER") DB_PASSWORD = os.getenv("DB_PASSWORD") DB_HOST = os.getenv("DB_HOST") DB_PORT = os.getenv("DB_PORT") DB_NAME = os.getenv("DB_NAME") try: engine = create_engine( f"postgresql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}" ) Session = scoped_session(sessionmaker(bind=engine)) except Exception as e: print(f"Failed to connect to database: {e}")
排查与解决方法
确认.env文件路径是否匹配
load_dotenv()默认从当前工作目录加载.env文件。如果你的启动脚本在app文件夹内(比如执行python app/main.py),此时工作目录是app,而.env在根目录,自然读不到。
解决办法:- 切换到项目根目录启动脚本;
- 给
load_dotenv指定.env的绝对路径,比如脚本在app文件夹内时:load_dotenv(os.path.join(os.path.dirname(__file__), '..', '.env'))
检查.env文件格式是否规范
确保文件内的键值对符合KEY=VALUE格式,不要在等号两边加空格,值不需要额外加引号(除非值包含空格),示例:DB_USER=my_db_user DB_PASSWORD=my_strong_password DB_HOST=localhost DB_PORT=5432 DB_NAME=my_database验证python-dotenv是否正确安装
确认依赖已安装,若不确定可重新安装:pip install python-dotenv排查环境变量是否被系统覆盖
系统中同名的环境变量会优先于.env文件中的值被读取,可以在代码中添加打印语句验证:print("DB_USER读取值:", DB_USER)若输出不是
.env中设置的内容,检查系统环境变量是否有同名配置。确认.env文件名无误
确保文件名是.env(开头有英文句号),避免被系统隐藏后缀导致实际文件名是.env.txt,可开启系统“显示文件扩展名”选项确认。
内容的提问来源于stack exchange,提问作者Rume One
相关产品推荐
相关产品推荐

