Python:测试和加载同一包的不同 git 提交

Python: testing & loading different git commits of same package

我在 github 上有一个 python 包,我可以使用例如安装它的不同提交版本pip3 install git+https://github.com/my/package@commithash。我想对各种不同的提交进行基准测试,理想情况下是在同一 python 脚本中比较两个版本,这样我就可以将不同版本的指标相互比较。对我来说,最明显的方法是同时安装同一个包的多个不同版本,并使用类似

的语法访问它们
import mypackage_commithash1 as p1
import mypackage_commithash2 as p2

results1 = p1.do_something()
results2 = p2.do_something()

plot_comparison(results1, results2)

但据我所知,python 不支持像这样的多个同名包,尽管 https://pypi.org/project/pip3-multiple-versions 在某些方面有所帮助。有人对在 python 脚本中进行此类比较的方法有任何建议吗?

这个问题太宽泛,无法给出明确的答案...

在同一环境中拥有同一项目的两个版本 运行,同一解释器会话很困难,几乎不可能。

首先,也许看看这个可能相关的问题:

1. 通过阅读您的问题,想到的另一个解决方案是在 2 个不同的虚拟环境中安装项目的 2 个版本。然后在第三个虚拟环境中,我会 运行 看起来像这样的代码(一种未经测试的伪代码,需要进行一些调整):

environments = [
    'path/to/env1',
    'path/to/env2',
]

results = []
for environment in environments:
    output = subprocess.check_output(
        [
            environment + 'bin/python',
            '-c',
            'import package; print(package.do_something())',
        ],
    )
    results.append(parse_output(output))

plot_comparison(results)

2. 另一种方法是最终使用 tox 到 运行 包含每个不同版本项目的不同环境中的测试程序.然后有一个额外的环境来 运行 解释和比较结果的代码(可能写在文件系统上?)。

3. 也许有人可以尝试与 importlib 一起破解一些东西。在 2 个不同的路径下安装 2 个版本 (pip install --target ...)。然后在测试代码中,类似这样的东西:

  • 修改sys.path以包含包含版本1
  • 的路径
  • 导入(也许 importlib 可以提供帮助)
  • 运行 测试 1
  • 修改 sys.path 以删除包含版本 1 的路径并包含包含版本 2 的路径
  • 再次导入(也许 importlib.reload 是必要的)
  • 运行 测试 2
  • 比较结果