You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从父目录下的文件夹导入模块?替代os.chdir的方法及报错解决

跨目录导入Python模块的几种解决办法

你的目录结构如下:

folder
├── analyse
│   └── analysis1.py
└── modules
    ├── analyses
    └── functions.py

(注:从你之前的导入代码来看,应该是modules/analyses文件夹下有functions.py,如果实际结构不同,调整导入路径即可)

下面是几种替代os.chdir的导入方法:

1. 手动把父目录加入Python搜索路径

直接在analysis1.py里把folder目录添加到sys.path,让Python能找到modules模块:

import sys
from pathlib import Path

# 获取当前脚本的父目录的父目录(也就是folder目录)
root_folder = Path(__file__).resolve().parent.parent
sys.path.append(str(root_folder))

# 现在就能正常导入了
from modules.analyses.functions import function1

这种方法简单直接,不需要改动项目结构。

2. 把项目做成可安装包(长期项目推荐)

如果你的项目需要长期维护,把folder做成可安装包是最规范的做法:

  • 在folder目录下新建pyproject.toml文件,内容如下:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "your-project"
version = "0.1.0"
  • 打开终端,进入folder目录,执行开发模式安装:
pip install -e .

之后不管你在哪个路径运行analysis1.py,都能直接用绝对导入:

from modules.analyses.functions import function1

3. 用相对导入(需以包的方式运行脚本)

你之前用相对导入报错,是因为直接运行analysis1.py时,Python不把它当作包的一部分。要让相对导入生效,得从folder的上级目录,用-m参数运行:
比如folder在/home/you/projects/下,就执行:

python -m folder.analyse.analysis1

此时analysis1.py里的相对导入就能正常工作:

from ..modules.analyses.functions import function1

补充:相对导入报错的原因

直接运行python analyse/analysis1.py时,Python会把analyse目录当作顶层模块的根目录,无法识别它的父目录folder,所以相对导入找不到对应的父包。只有当脚本作为包的一部分被导入,或者用-m参数以模块方式运行时,相对导入才会生效。

内容的提问来源于stack exchange,提问作者Tobias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 05:50:27