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

如何让Python 3.6支持from package.module.submodule import SomeClass式绝对导入?

在Python 3.6中实现from package.module.submodule import SomeClass导入的必备条件

好的,咱们来拆解一下在2018年的Python 3.6环境里,实现这种层级式导入需要满足的核心条件——像Django、TensorFlow这类大型项目都是严格遵循这些规则来组织代码的:

  • 符合规范的包目录结构
    每个层级的目录都需要包含__init__.py文件,哪怕这个文件是空的也没关系。它的核心作用是告诉Python:“这个目录是一个可导入的包/子包”。
    对应的目录结构必须和导入路径完全匹配:比如要实现from package.module.submodule import SomeClass,你的文件夹结构得是这样的:

    parent_directory/
        package/
            __init__.py
            module/
                __init__.py
                submodule.py  # 这里定义了SomeClass
                # 或者是submodule目录:
                # submodule/
                #     __init__.py
                #     some_file.py  # 定义了SomeClass,且submodule/__init__.py里导入了它
    
  • 包的根目录必须在Python的模块搜索路径中
    Python只会在sys.path列表包含的目录下查找可导入的包和模块。你可以通过import sys; print(sys.path)查看当前的搜索路径。
    常见的将根目录加入搜索路径的方式有三种:

    • 通过pip install将包安装到Python的site-packages目录,这是大型项目的标准做法,安装后包会自动被加入搜索路径。
    • 开发调试时,手动将包的父目录添加到sys.path(比如sys.path.append("/path/to/parent_directory")),但这种方式不推荐在生产环境使用。
    • 运行Python脚本时,将包的父目录设为当前工作目录,因为当前目录默认会被加入sys.path。
  • 目标类/对象必须存在于指定的子模块中

    • 如果submodule是单个.py文件,那么SomeClass必须直接定义在这个文件里。
    • 如果submodule是一个子包(目录),那它的__init__.py文件里必须导入或定义SomeClass,比如在submodule/__init__.py中写from .some_file import SomeClass,这样外部才能通过submodule.SomeClass访问到这个类。
  • 避免命名冲突
    要确保你的包名、模块名不会和Python标准库或者已安装的第三方包重名。比如你不能把自己的包命名为requests,否则Python会优先导入搜索路径中先出现的同名模块,导致你的代码无法被正确导入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:48:35