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

如何在含嵌套目录与__init__.py的Python项目中动态导入模块?

简化Python项目导入路径的方案

一、通过__init__.py实现导入转发

这是最直接的本地解决方案,无需额外工具:

  • 在src/__init__.py中添加导入语句,将function模块提升到顶级可见:
    # src/__init__.py
    from . import function
    
  • 若要进一步简化到直接导入函数,在src/function/__init__.py中补充:
    # src/function/__init__.py
    from .function import get_service
    
    完成后就能直接使用from function import get_service,完全跳过src前缀。

二、用pyproject.toml配置可安装项目(推荐)

这种方式更规范,适合长期维护的项目,能让Python自动把src下的包识别为顶级模块:

  1. 在项目根目录创建pyproject.toml,添加以下配置(以setuptools为例):
    [project]
    name = "my_project"
    version = "0.1.0"
    
    [tool.setuptools.find]
    where = ["src"]  # 告知setuptools从src目录查找包
    
  2. 在项目根目录运行可编辑安装命令:
    pip install -e .
    
    安装完成后,无论在项目哪个目录(比如tests下),都可以直接使用from function import get_service,Python会自动识别function为顶级模块。

三、临时添加模块搜索路径(不推荐)

如果只是临时测试,可以在需要导入的文件开头手动把src目录加入Python的搜索路径,但这种方式不适合正式项目:

# tests/test_test_function.py 开头添加
import sys
from pathlib import Path

# 将src目录的绝对路径加入sys.path
sys.path.append(str(Path(__file__).parent.parent / "src"))

对你问题的直接解答

  • 是否需要在__init__.py做特定设置?
    是的,通过在__init__.py中添加导入转发语句,可以快速实现简化导入的需求。
  • 是否需要自定义导入机制?
    不需要,上述两种标准方案(导入转发+pyproject.toml配置)完全能满足需求,自定义导入机制会无端增加项目复杂度。
  • 是否可以通过pyproject.toml控制?
    当然,而且这是推荐的方式,通过配置项目的包结构,让Python自动识别顶级模块,无需手动修改路径或导入语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:07:30