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

如何创建带子包的私有Python库并实现层级按需导入?

实现私有Python库的按需导入方案

完全可行,只要通过配置各个__init__.py文件就能实现你要的三种导入效果,下面是针对入门开发者的直白步骤:

先明确清晰的目录结构

先把你的目录换成更直观的命名(后续扩展时直接沿用这个逻辑):

我的项目文件夹/
├── 导入用的脚本.py  # 你要导入包的那个Python文件
└── my_private_lib/  # 你的主包文件夹
    ├── __init__.py
    └── sub_lib_a/  # 子包文件夹(后续加子包直接新建同名结构即可)
        ├── __init__.py
        └── module1.py  # 子包下的模块

配置各个__init__.py文件

1. 主包的__init__.py(实现导入主包时加载所有子包)

打开my_private_lib/__init__.py,写入以下内容:

# 导入所有子包,后续新增子包时,在这里加一行对应的导入语句
from . import sub_lib_a
# 比如以后加sub_lib_b,就加:from . import sub_lib_b

2. 子包的__init__.py(实现导入子包时加载该子包所有模块)

打开sub_lib_a/__init__.py,写入以下内容:

# 导入当前子包下的所有模块,后续新增模块时,在这里加一行对应的导入语句
from . import module1
# 比如以后加module2,就加:from . import module2

三种导入效果的使用方式

效果1:导入主包及所有子包的全部模块

直接在你的脚本里写:

import my_private_lib

# 调用示例:假设module1里有个func1函数
my_private_lib.sub_lib_a.module1.func1()

效果2:仅导入指定子包的全部模块

直接在脚本里写:

import my_private_lib.sub_lib_a

# 调用示例
my_private_lib.sub_lib_a.module1.func1()

# 也可以用别名简化写法
import my_private_lib.sub_lib_a as sub_a
sub_a.module1.func1()

效果3:仅导入指定的单个模块

注意:Python导入模块不需要加.py后缀,正确写法如下:

# 方式1:直接导入模块
from my_private_lib.sub_lib_a import module1
module1.func1()

# 方式2:用别名导入
import my_private_lib.sub_lib_a.module1 as m1
m1.func1()

后续扩展的注意事项

  • 新增子包时:在主包的__init__.py里添加from . import 新子包名,同时给新子包创建自己的__init__.py并导入其下的模块。
  • 新增模块时:在对应子包的__init__.py里添加from . import 新模块名。
  • 尽量避免用from . import *的写法,虽然省事,但后续模块多了容易出现命名冲突,逐个导入更清晰可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:20:42