PyCharm运行程序时默认工作目录为项目根目录,但脚本常需在特定子目录下运行;最稳定做法是配置Run Configuration中的Working directory字段,支持绝对路径或变量如$ProjectFileDir$\src,该设置持久生效且适用于本地及远程解释器场景。

PyCharm 运行程序时默认使用项目根目录作为工作目录,但很多脚本(比如读取相对路径的配置文件、日志、数据集)需要在特定子目录下运行才正常。不能靠 os.chdir() 临时改——它只影响当前进程,且容易被后续模块或测试框架覆盖;真正有效的做法是配置运行配置(Run Configuration)里的工作目录。
PyCharm 运行配置中设置 Working directory
这是最稳定、最推荐的方式,适用于所有本地 Python 脚本运行场景:
- 右上角点击当前运行配置名称(比如
main.py)旁的小箭头 → Select configuration → Edit configurations… - 左侧选中你要修改的配置(如
Script path对应的那个) - 右侧找到 Working directory 输入框
- 可填绝对路径(如
D:\mysite\backend),也可用变量:$ProjectFileDir$\src或$ProjectFileDir$\tests - 变量说明:
$ProjectFileDir$指项目根目录;$FileDir$指当前脚本所在目录(慎用,多文件时行为不一致) - 改完点 OK,下次运行就生效,且该配置会保存到
.idea/runConfigurations/下
为什么不能只靠 os.chdir() 在代码里切目录
看似简单,但实际踩坑率极高:
PyCharm 2026.2是 JetBrains PyCharm 的指定版本安装包,下载地址指向官方 Windows 安装包直链,可用于旧项目兼容、版本回退和环境测试。
-
os.chdir()改的是当前 Python 进程的全局工作目录,会影响所有后续相对路径操作(包括import、open()、logging.basicConfig(filename="...")) - 如果脚本被
pytest或unittest加载,测试框架可能在你调用os.chdir()前/后重置工作目录,导致行为不可预测 - 多个线程或子进程启动时,
os.chdir()不会同步到子进程,容易出现“文件找不到”但路径明明对的诡异问题 - 调试时断点停住再手动执行
os.chdir(),只影响当前调试会话,不改变运行配置本身
Terminal 里 cd 切换和运行配置是两回事
很多人误以为在 PyCharm 底部 Terminal 里 cd mysite 后点绿色三角形就能按新目录运行——其实完全无效:
- Terminal 的
cd只影响该终端会话的 shell 工作目录,和 Python 运行配置无关 - 点击运行按钮时,PyCharm 启动的是全新 Python 进程,它读取的是运行配置里的 Working directory,不是 Terminal 当前路径
- 唯一例外:你在 Terminal 里手动敲
python main.py,这时才真正用 Terminal 的当前目录 —— 但这绕过了 PyCharm 的调试、环境变量、解释器配置等关键能力
远程解释器(SSH/WSL/Docker)下工作目录更需显式指定
本地配置好不等于远程也生效,尤其用 SSH 解释器时:
- 远程服务器上没有
$ProjectFileDir$这个概念,PyCharm 会把该变量展开为远程映射路径(如/home/user/mysite) - 务必确认远程路径真实存在,且用户有读写权限;否则运行时报
FileNotFoundError: [Errno 2] No such file or directory - 如果项目路径在远程是软链接,PyCharm 展开变量时可能解析为真实路径(
/var/www/mysite),而非你期望的链接路径(/home/user/mysite) - 建议统一用绝对路径(如
/home/user/mysite/src),避免变量展开歧义
真正要改工作目录,就只动运行配置里的 Working directory 字段。其他方式要么临时、要么不可靠、要么只作用于局部场景。变量路径看着方便,但跨平台或远程部署时最容易出隐形问题——能写死绝对路径就写死,比猜变量展开结果更省心。

















