这不是问题的重复项:
Import python packages with different versions installed
也不能通过virtualenv / pipenv 解决:共享相同名称/路径但具有不同代码/版本的软件包必须在相同环境下安装,程序才能正常运行
考虑以下经典的钻石依赖问题:
假设我们对软件包“ program”,“ feature_A”和“ feature_B”的源代码具有完全访问权限,feature_A和feature_B均具有以下代码:
import library.*
在诸如virtualenv,pip和conda之类的常规程序包管理器中,上述情况将阻止feature_A和feature_B在同一项目中使用。但是,由于python是一种解释性语言,因此我们可以使用feature_A和feature_B的源代码。应该可以做以下事情:
获取library (v1.0)
和library (v2.0)
的包源代码/字节码,分别为它们生成2个加密哈希,然后将其安装在2条不同的路径下,具体取决于它们各自的哈希值。
使用代码生成器重写feature_A
和feature_B
,以便它们从依赖于加密哈希的新路径导入,并安装重写的版本。
使用代码生成器重写program
,以便它从安装了重写的feature_A
和feature_B
的新路径中导入。
现在我的问题是:完全自动化此过程有多困难?是否需要弱人工智能?还是可以使用纯功能逻辑来完成?
答案 0 :(得分:1)
我会在不同的count += 1
中安装不同的软件包版本,例如
print(f"i = {i}")
或
print(f"j = {j}")
,对于要在其他路径PYTHONPATH
中安装的软件包的其他版本,则相同。在不同PYTHONPATH=insertherepath1 ; python setup.py install --prefix=insertherepath1
中的两个安装仍然可以访问主python路径中的其他常用安装软件包。
要使用PYTHONPATH=insertherepath1 ; pip install --install-option="--prefix=insertherepath1" package==v1
中的不同软件包:
insertherepath2
并等效使用其他版本:
PYTHONPATH
答案 1 :(得分:1)
我自己还没有遇到这种情况。我的建议是重命名库,以便它们以不同的名称安装。在我看来,这似乎是最简单的方法。
答案 2 :(得分:0)
安装特定版本
pip允许您使用版本说明符指定要安装的软件包版本。例如,要安装特定版本的请求:
pip install requests==2.18.4
要安装最新的2.x版本的请求,请执行以下操作:
pip install requests>=2.0.0,<3.0.0
要安装软件包的预发行版本,请使用--pre标志:
pip install --pre requests
答案 3 :(得分:0)
python pkg_resources可能会帮助您。
https://setuptools.readthedocs.io/en/latest/pkg_resources.html#workingset-objects