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

Docker环境下同目录Python模块导入失败的原因与解决方法

问题原因与解决方法

为什么会出现这个错误?

Python的模块导入是基于sys.path列表查找模块的。当你通过python3 rest_api.py启动程序时,rest_api.py所在的目录(容器内的/usr/application)会被自动加入sys.path,所以from app.main import ...能正常找到app包。

但main.py是作为app包的子模块被导入的,运行上下文属于app包。此时用from foo import *属于绝对导入,Python会直接去sys.path里找名为foo的模块,不会自动在app目录下查找,自然找不到同级的foo.py。

解决方法

三种可靠方案任选其一即可:

  • 使用相对导入(推荐)
    在main.py里改成包内相对导入的写法,用.表示当前包的同级目录:

    from .foo import *
    # 导入bar.py同理:
    # from .bar import *
    

    这种写法明确指向当前包内的同级模块,符合Python包设计规范。

  • 添加__init__.py(规范包结构)
    在app目录下创建一个空的__init__.py文件,虽然Python 3.3+支持无此文件的命名空间包,但这个文件能明确标识app是Python包,避免潜在导入歧义。

  • 使用绝对导入
    直接用完整包路径导入模块,这种方式在任何上下文下都能稳定找到模块,适合大型项目:

    from app.foo import *
    # 导入bar.py则写:
    # from app.bar import *
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:03:14