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

如何构建Python包以同时支持代码运行与测试?

问题根源

当直接运行src/module1.py时,Python会将脚本所在的src/目录加入sys.path,而非项目根目录,因此无法识别src作为顶级包;而测试时从项目根目录执行pytest,根目录在sys.path中,src.module2能被正常解析。以下是几种同时满足脚本执行和测试的方案:

方案1:使用-m参数运行脚本(快速生效)

  • 保持src内部模块使用绝对导入,例如module1.py中:
    from src.module2 import some_func, some_other_func
    
  • 不要直接执行python src/module1.py,而是在项目根目录运行:
    python -m src.module1
    
    此命令会将项目根目录加入sys.path,让Python正确识别src包,测试时仍在根目录执行pytest即可。

方案2:配置pytest自动加载src路径(适配相对导入)

  • 将src内部模块改为相对导入,module1.py中:
    from .module2 import some_func, some_other_func
    
  • 在项目根目录创建pytest.ini文件,添加以下内容:
    [pytest]
    pythonpath = src
    
    这样pytest会自动把src目录加入sys.path,测试时能直接找到module2;直接执行python src/module1.py时,src目录默认在sys.path中,相对导入也能正常工作。

方案3:转为可安装包(长期规范方案)

  • 在项目根目录创建pyproject.toml:
    [build-system]
    requires = ["setuptools>=61.0"]
    build-backend = "setuptools.build_meta"
    
    [project]
    name = "your-project"
    version = "0.1.0"
    packages = ["src"]
    
  • 执行开发模式安装:
    pip install -e .
    
    安装后,无论是运行python -m src.module1还是执行pytest,所有导入都会被正确解析,这是Python项目的标准实践,适合长期维护。

简化操作的工具

  • 使用poetry或pipenv这类项目管理工具,它们会自动处理路径和依赖,创建项目时生成规范结构:
    poetry new your-project
    
    生成的项目结构自带合规的src和测试目录,导入与测试问题无需手动配置即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:23:19