首页 > 解决方案 > Python:测试和加载同一包的不同 git 提交

问题描述

我在 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 脚本中进行此类比较的方法有任何建议?

标签: python-3.xgithubpipinstallationversion

解决方案


这个问题太笼统了,无法给出明确的答案……

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

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

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. pip install --target ...在 2 个不同的路径 ( )下安装 2 个版本。然后在测试代码中,类似这样:

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

推荐阅读