You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python测试疑问:应测已安装还是未安装版本?求最佳实践

pytest vs Python指南:测试已安装/未安装版本的最佳实践

这确实是Python项目测试时容易纠结的点,我来帮你理清楚两者的核心逻辑,以及不同场景下该怎么选:

先搞懂两个建议的出发点

  • pytest官方建议测试已安装版本:本质是要模拟真实用户的使用场景——用户最终是把你的包安装到他们的Python环境里才会用的。测试已安装版本能帮你排查「本地跑正常,但安装后就崩」的问题,比如打包时漏了资源文件、setup配置错了依赖、入口脚本路径不对这类坑。
  • Python指南建议测试未安装版本:核心是为了开发效率。你日常改代码的时候,总不能每次改一行就重新安装一次包吧?直接测试源码目录的版本,改完代码就能立刻跑测试,调试起来快得多,适合快速迭代的开发阶段。

分场景的最佳实践

1. 日常开发阶段:优先用「开发模式安装+测试」

咱不用非选一边,用pip install -e .(开发模式安装)就能兼顾两者的优势:

  • 它会把你的包链接到Python的site-packages目录里,既让你修改源码后能实时生效(不用重新安装),又能模拟安装后的导入逻辑,避免出现「本地导入没问题,安装后导入报错」的情况。
  • 直接在项目根目录跑pytest就行,和测试未安装版本一样方便,但环境更接近真实用户的使用场景。

2. 发布前/CI自动化流程:必须测试已安装版本

这一步是给你的包「最终体检」,要完全模拟用户的安装流程:

  1. 先打包:用python -m build生成wheel或sdist包
  2. 新建一个干净的虚拟环境(避免本地依赖干扰)
  3. 安装你刚打包好的包:pip install dist/your-package-*.whl
  4. 把测试代码复制到干净环境里(或者确保测试代码不依赖本地源码目录),运行测试
    这样能彻底排查打包过程中的所有问题,保证你发布到PyPI的版本是真正可用的。

3. CI进阶方案:两者都测

在你的CI流水线里分两个阶段:

  • 第一阶段:直接测试源码(未安装版本),快速反馈代码逻辑是否出错,节省时间
  • 第二阶段:走打包-安装-测试的全流程,确保发布包的完整性
    这样既不耽误开发反馈速度,又能守住发布的质量底线。

补充一个常见坑

如果你的项目用了相对导入,直接测试未安装版本可能会出现ImportError,这时候pip install -e .就是最优解——它让你的包变成「可导入的正式包」,导入逻辑和安装后完全一致,不会有路径问题。

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

火山引擎 最新活动