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

如何合并Python中的import语句?实例场景下的优化求助

合并共享前缀路径的Python导入语句

问题背景

当前项目目录结构如下:

-main.py  # 导入语句所在文件
-src
   -eb_environments
      -performance_reports
         -reports_procs
            -sp
               -all_targets
                  -add_sp_targets_to_db.py
            -sb
               -keywords
               -targets
               -search_terms
            -sd
               -targets

现有导入语句如下:

from src.eb_environments.performance_reports.reports_procs.sp.all_targets import (
    add_sp_targets_to_db,
)
from src.eb_environments.performance_reports.reports_procs.sp.search_terms import (
    add_sp_sts_to_db,
)
from src.eb_environments.performance_reports.reports_procs.sb.keywords import (
    add_sb_kws_to_db,
)
from src.eb_environments.performance_reports.reports_procs.sb.targets import (
    add_sb_targets_to_db,
)
from src.eb_environments.performance_reports.reports_procs.sb.search_terms import (
    add_sb_st_to_db,
)
from src.eb_environments.performance_reports.reports_procs.sd.targets import (
    add_sd_targets_to_db,
)

所有导入均共享src.eb_environments.performance_reports.reports_procs前缀路径,希望合并简化导入语句,曾尝试在reports_procs目录创建__init__.py但未成功,寻求可行方案。


可行解决方案

方案一:根级__init__.py统一导出

在src/eb_environments/performance_reports/reports_procs/__init__.py中,将所有需要导入的方法统一导入到该模块的命名空间:

# reports_procs/__init__.py
from .sp.all_targets import add_sp_targets_to_db
from .sp.search_terms import add_sp_sts_to_db
from .sb.keywords import add_sb_kws_to_db
from .sb.targets import add_sb_targets_to_db
from .sb.search_terms import add_sb_st_to_db
from .sd.targets import add_sd_targets_to_db

之后在main.py中即可一次性导入所有方法:

from src.eb_environments.performance_reports.reports_procs import (
    add_sp_targets_to_db,
    add_sp_sts_to_db,
    add_sb_kws_to_db,
    add_sb_targets_to_db,
    add_sb_st_to_db,
    add_sd_targets_to_db,
)

注意:之前尝试失败大概率是因为__init__.py中用了绝对路径而非相对路径(比如写src.xxx而非.sp.xxx),或者未将方法正确导入到全局命名空间。

方案二:子模块级__init__.py分类导出

如果希望按子模块(sp/sb/sd)分组管理,可以在每个子模块目录下创建__init__.py:

  1. 在reports_procs/sp/__init__.py中:
from .all_targets import add_sp_targets_to_db
from .search_terms import add_sp_sts_to_db
  1. 在reports_procs/sb/__init__.py中:
from .keywords import add_sb_kws_to_db
from .targets import add_sb_targets_to_db
from .search_terms import add_sb_st_to_db
  1. 在reports_procs/sd/__init__.py中:
from .targets import add_sd_targets_to_db

之后main.py的导入语句可按子模块分组简化:

from src.eb_environments.performance_reports.reports_procs.sp import (
    add_sp_targets_to_db,
    add_sp_sts_to_db,
)
from src.eb_environments.performance_reports.reports_procs.sb import (
    add_sb_kws_to_db,
    add_sb_targets_to_db,
    add_sb_st_to_db,
)
from src.eb_environments.performance_reports.reports_procs.sd import (
    add_sd_targets_to_db,
)

方案三:直接分组导入(无需修改__init__.py)

如果不想修改任何__init__.py,可以将同前缀的导入按子模块合并为多行分组(虽然不如前两种简洁,但比原语句短):

# 导入sp相关方法
from src.eb_environments.performance_reports.reports_procs.sp.all_targets import add_sp_targets_to_db
from src.eb_environments.performance_reports.reports_procs.sp.search_terms import add_sp_sts_to_db

# 导入sb相关方法
from src.eb_environments.performance_reports.reports_procs.sb import (
    keywords, targets, search_terms
)
# 调用时需用 keywords.add_sb_kws_to_db 形式,适合不频繁调用的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:55:08