项目目录非单级结构,如何从子目录向上级目录导入模块?
从子目录向上级目录导入模块的解决方法
先明确你的项目结构(根据描述整理):
项目根目录/ ├── main.py ├── package_1/ │ └── my_module.py └── sub_dir/ # sub_file.py 在此子目录中 └── sub_file.py
如果子目录中的sub_file.py需要导入上级目录或跨目录的模块,以下三种方法可以解决:
方法1:临时添加上级目录到模块搜索路径
在sub_file.py开头加入代码,手动将上级目录加入Python的模块搜索路径,之后即可正常导入:
import sys import os # 获取当前文件所在目录的上级目录绝对路径 parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(parent_dir) # 正常导入目标模块 from package_1.my_module import multiple class sub_class: def my_method(): a = 5 x = 3 y = 2 return a + multiple(x, y)
方法2:将项目转为Python包(使用相对导入)
给所有需要作为包的目录添加空的__init__.py文件,结构更新为:
项目根目录/ ├── __init__.py ├── main.py ├── package_1/ │ ├── __init__.py │ └── my_module.py └── sub_dir/ ├── __init__.py └── sub_file.py
然后在sub_file.py中使用相对导入语法:
# .. 表示上级目录,定位到项目根目录后导入目标模块 from ..package_1.my_module import multiple class sub_class: def my_method(): a = 5 x = 3 y = 2 return a + multiple(x, y)
注意:这种方式不能直接运行sub_file.py,必须从项目根目录外部,以包的方式执行主文件,比如:
python -m 项目根目录.main
方法3:设置PYTHONPATH环境变量
将项目根目录添加到系统的PYTHONPATH环境变量中,Python会自动在该路径下搜索模块:
- Linux/macOS终端:
export PYTHONPATH=/你的项目根目录绝对路径:$PYTHONPATH - Windows命令提示符:
set PYTHONPATH=C:\你的项目根目录绝对路径;%PYTHONPATH%
设置完成后,sub_file.py可直接像单级目录一样导入模块:
from package_1.my_module import multiple class sub_class: def my_method(): a = 5 x = 3 y = 2 return a + multiple(x, y)
同时,main.py若要导入子目录的sub_class,需修改导入语句:
from sub_dir.sub_file import sub_class class main: def main_method(): print(sub_class.my_method()) main.main_method()
内容的提问来源于stack exchange,提问作者sonny
相关产品推荐
相关产品推荐

