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

Python相对导入疑问:为何直接import modelling_llama可跨层级生效?

Python模块导入问题解析

项目目录结构

|-- eval.py
|-- modeling_llama.py
|-- patch
|   |-- __init__.py
|   |-- flash_attn.py
|   |-- log_scale.py
|   |-- ntk.py
|   |-- ntk_fixed.py
|   |-- ntk_mixed.py
|   `-- rerope.py
|-- prompt.py
|-- test_model.sh
`-- utils.py

三种导入方式的具体分析

1. import modelling_llama 能正常工作的原因

你直接运行的是eval.py,Python会自动把当前运行脚本所在的项目根目录加入到sys.path的最前面。当eval.py导入utils.py,utils.py再导入patch包时,rerope.py执行导入操作时,sys.path里已经包含了项目根目录,Python会直接在这些路径里查找modelling_llama.py,自然能找到目标模块。

2. from .. import modelling_llama 失败的原因

相对导入依赖模块的__package__属性,只有当模块被当作包的一部分导入时才有效。这里patch被utils.py导入,而utils.py是被作为脚本运行的eval.py导入的,此时rerope.py的__package__值为patch,但..指向的上层目录(项目根目录)并没有被Python视为合法的包(根目录没有__init__.py,就算有,直接运行脚本的场景下,Python也不会把根目录当作顶层包处理)。另外Python禁止从顶层包之外进行相对导入,所以这种写法会报错。

3. import ..modeling_llama 直接语法错误

这种写法本身就不符合Python的语法规范,相对导入只能用from .. import 模块名的形式,import ..xxx的写法从语法上就不被支持,所以直接运行就会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:43:15