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

项目目录非单级结构,如何从子目录向上级目录导入模块?

从子目录向上级目录导入模块的解决方法

先明确你的项目结构(根据描述整理):

项目根目录/
├── 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:24:17