在nox中如何等效实现tox的site-packages目录获取能力
nox 中获取当前会话 site-packages 目录的正确方式
你之前写的代码无法正常运行,核心原因是调用了不存在的虚拟环境属性,修正后即可实现和 tox envsitepackagesdir 完全等价的能力。
错误原因
nox 的虚拟环境对象并没有site_packages_dir这个属性,内置的对应属性名是site_packages,多写了_dir后缀就会触发属性不存在的报错。
修正后的可运行代码
import nox @nox.session() def test(session): session.install('.') session.install('pytest', 'pytest-cov') # 直接引用内置属性获取site-packages路径 cov_target = f"{session.virtualenv.site_packages}/mypackage" session.run('pytest', '--cov', cov_target)
实用补充
- 这个内置属性会自动适配不同操作系统、不同Python版本的site-packages路径规则,不需要手动做跨平台兼容处理,直接用来做覆盖率统计的目标路径完全够用。
- 如果遇到自定义安装路径、包被安装到非默认site-packages位置的特殊场景,可以直接动态读取目标包的实际安装路径,彻底避免手动拼接路径带来的偏差:
# 动态获取mypackage的实际安装目录 mypackage_dir = session.run( "python", "-c", "import mypackage, os; print(os.path.dirname(mypackage.__file__))", silent=True ).strip() session.run("pytest", "--cov", mypackage_dir)
内容的提问来源于stack exchange,提问作者drhagen
相关产品推荐
相关产品推荐

