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
- 比较结果
我在 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
- 比较结果