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

Python项目不修改结构,如何在子包中导入外部子包模块?

Python跨模块导入解决方案(不改动项目结构)

方法1:手动添加项目根路径到sys.path

在main2.py的开头加入以下代码,将项目根目录纳入Python的模块搜索路径:

import sys
from pathlib import Path

# 定位项目根目录(假设module B的父目录就是项目根)
project_root = Path(__file__).parent.parent
sys.path.append(str(project_root))

# 正常导入目标函数
from moduleA.funcs import target_function

这种方式不需要改变项目结构,直接运行main2.py就能生效,本质是让Python能找到上层目录的模块。

方法2:使用相对导入(需以包形式运行)

如果把整个项目视为一个Python包,可以在main2.py中用相对导入语法:

from ..moduleA.funcs import target_function

注意:这种方式不能直接运行main2.py(直接执行会触发ValueError: attempted relative import in non-package错误),必须从项目根目录通过包模块的方式启动:

python -m moduleB.main2

相对导入是Python包内部模块间引用的标准方式,但依赖于包的运行上下文。

关于Django导入方式的差异

Django的manage.py在启动时会自动将项目根目录添加到sys.path,同时Django的APP本身就是被作为包来管理的,因此可以直接用from app_name.module_name import ...的格式。而你直接运行main2.py时,Python默认只将该文件所在目录加入搜索路径,无法识别上层的moduleA,所以直接套用Django的写法会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:28:16