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

Python中如何将两个py文件合并为单个模块导入使用?

Python模块合并实现单个utils命名空间的最优方案

方案1:直接导入通用模块所有内容(最简实现)

这是最适配你当前场景的方案,不需要手写任何包装函数,直接在专属工具模块中导入通用工具的所有公共成员即可:

# utils_functionality_1.py 代码
# 直接导入通用工具的所有非私有属性到当前模块命名空间
from src.utils_general import *

# 下方正常编写专属工具函数即可
def utils_func1_for_f1():
    # 业务逻辑
    pass

随后在main_functionality_1.py中直接导入专属工具模块,即可同时访问两类函数:

# main_functionality_1.py 代码
import src.functionality_1.utils_functionality_1 as utils

# 可直接调用通用函数和专属函数
utils.general_func()
utils.utils_func1_for_f1()

该方案利用Python原生导入机制直接合并命名空间,无冗余代码,后续新增通用函数也不需要修改专属工具模块,维护成本极低。

方案2:增加__all__控制导出范围(规范实现)

如果需要明确控制对外暴露的函数列表,避免导入不必要的私有成员,可以搭配模块级__all__变量使用:

# utils_functionality_1.py 代码
from src.utils_general import *
# 引入通用模块的导出列表
from src.utils_general import __all__ as general_utils_all

# 专属工具函数
def utils_func1_for_f1():
    pass

def utils_func2_for_f1():
    pass

# 合并导出列表
__all__ = [*general_utils_all, "utils_func1_for_f1", "utils_func2_for_f1"]

该方案适合多人协作的大型项目,明确的导出列表能降低使用者的心智负担,也符合Python的模块开发规范。

方案3:动态属性注入(可控性最高)

如果你不想使用import *语法,希望严格过滤导入的属性,可以通过遍历通用模块属性的方式动态注入到当前模块:

# utils_functionality_1.py 代码
import sys
from src import utils_general

# 遍历通用模块的所有属性,仅导入非私有成员
for attr_name in dir(utils_general):
    if not attr_name.startswith("_"):
        setattr(sys.modules[__name__], attr_name, getattr(utils_general, attr_name))

# 编写专属工具函数
def utils_func1_for_f1():
    pass

该方案可以灵活控制导入规则,比如你可以指定只导入特定前缀的通用函数,适合有特殊导入规则的场景。

不推荐的实现方式

你之前想到的手写包装函数的方案维护成本极高,新增通用函数、修改通用函数参数都需要同步修改专属模块的包装代码,冗余度高且容易出问题,不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:48:00