python-3.x - 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 脚本中进行此类比较的方法有任何建议?
解决方案
这个问题太笼统了,无法给出明确的答案……
在同一个环境中运行同一个项目的两个版本,同一个解释器会话是困难的,几乎是不可能的。
首先,也许看看这个可能相关的问题:
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
- 比较结果
推荐阅读
- html - 使 2 个 DIV 并排具有相同的高度和移动响应
- android - 如何使用适用于 Android 的 Cordova 插件截屏?
- javascript - Nativescript-蓝牙 LE 插件。在哪个线程执行 onDiscovered 函数?
- php - 如何在回调中接收表单数据,并在控制器中使用 post 值?
- php - 如何使用 laravel php 通过 linnwork api 获取订单
- java - 使用流将字符串转换为用分隔符分隔的整数序列
- css - 具有弹性模式的 Ngx-datatabel 响应式行详细信息
- python-3.x - 有没有办法从列表中获取 k 个最小元素而不用 Python 对其进行排序?
- regex - Elasticsearch 令牌过滤器,用于删除带有单个单词的令牌
- r - 用 R 中的特定条件替换 NA