mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
528 字
1 分钟
路径问题
2026-03-15

路径问题#

众所周知啊!咱们上传到github上的文件得有.gitignore。里面是让git忽略的文件。最常见的就是.env用于存储环境变量的文件啦!里面大多数是什么数据库的密码呀,个人token呀,小网站的会员密码(bushi)😋

我们在python读取env文件有很多方式,最经典的就是os.getenv(),但是我比较喜欢用pydantic😋

错误示例#

.env文件中
REPO_NAME=Big-fat-dog/Mizuki_Backstage
setting.py
from pydantic_settings import BaseSettings,SettingsConfigDict
class Settings(BaseSettings):
REPO_NAME:str
model_config=SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
case_sensitive=False # 不区分大小写
)
settings = Settings()
if __name__ == "__main__":
print(settings.REPO_NAME)
#如果你直接运行该脚本会报错!

🤔为什么会这样?#

当你检查完所有问题后,会锁定错误在这里env_file=".env",那么这个时候就有人要问了!鼠包鼠包,为什么人家github上标准的写法就是这样呢?并且我运行项目后也能读取到环境变量啊!为什么就是在脚本里执行就不能打印呢?

这个就是python的**“位置”**问题

两个位置#

先看项目结构

87e9da15ff7f47f69f51971ea0654636_o_1773541857240

️😎 *脚本位置 (Script Location)*

  • 定义.py 文件在硬盘上物理存放的地方。
  • 代表变量__file__
  • 特点雷打不动! 无论你在哪运行,github_service.py 永远躺在 D:\mizuki_backend\app\services\ 里。
  • 用途:用来找“兄弟文件”(比如同目录下的模板、静态资源)。

🤔****工作目录 (Working Directory / CWD)****

  • 定义:你敲下回车键那一刻,终端所在的文件夹
  • 代表变量os.getcwd() (Current Working Directory)
  • 特点随风飘摇! 你在根目录敲命令,它就在根目录;你在 C 盘敲命令,它就在 C 盘。
  • 用途相对路径的起点! 当你写 open(".env")env_file=".env" 时,Python 是去工作目录找,而不是去脚本位置找!

而我们在pycharm里面点击运行按钮就是工作目录的原理

如果你直接运行github_service.py

Python 的视角:
“老板,我现在站在 D:\mizuki_backend\app\services 。” (os.getcwd())
“你要我找 .env?”
“好嘞,我去 D:\mizuki_backend\app\services\.env 找一下...”
🔴 结果:找不到!因为 .env 在上一级目录!
💥 爆炸:ValidationError: Field required

但是如果你直接启动项目(比如fastapi)

Python 的视角:
“老板,我现在站在 D:\mizuki_backend 。” (os.getcwd())
“你要我找 .env?”
“好嘞,我去 D:\mizuki_backend\.env 找一下...”
🟢 结果:找到了!就在脚下!
✨ 成功:配置加载完美。

综上,这是个恶心人的小坑,控了我半天时间😭 那我就吃一堑吃一堑吃吃吃吃吃吃一一吃一堑,长一智💢

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

路径问题
https://mizuki.mysqil.com/posts/luijing/
作者
神秘大胖狗
发布于
2026-03-15
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00