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

Python项目中同名子包的导入问题解决方案咨询

解决server.py导入顶层models包的方案

方法1:以模块方式运行脚本(推荐)

在my_project的父目录下执行以下命令启动服务:

python -m my_project.server.server

此时server.py中可直接使用绝对导入访问顶层共享models包,同时不影响内部models的导入:

# 导入顶层共享的model_2
from my_project.models.model_2 import Y
# 导入server专用的model_1
from models.model_1 import X

方法2:使用相对导入(需配合模块运行方式)

相对导入语法本身是正确的,但报错是因为直接运行server.py时,Python未将其识别为包的一部分。同样采用模块方式运行脚本后,server.py中可使用相对导入:

# 向上跳出server包,导入顶层models的model_2
from ..models.model_2 import Y
# 导入server内部的model_1
from models.model_1 import X

方法3:通过server包的__init__.py中转(可选)

如果不想改变运行方式,可在server/__init__.py中添加中转代码:

from my_project.models import model_2

随后在server.py中即可导入:

from . import model_2
Y = model_2.Y
# 正常导入内部model_1
from models.model_1 import X

问题根源

直接运行单个.py文件时,Python会将其视为顶层脚本,而非包结构的一部分,导致相对导入无法定位父包;而用-m参数以模块方式运行时,Python会解析整个项目的包层级结构,此时绝对/相对导入均可正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:27:21