gpt4 book ai didi

python - 在python环境下,如何导入特定版本的包?

转载 作者:太空宇宙 更新时间:2023-11-04 01:51:51 25 4
gpt4 key购买 nike

这不是问题的重复:

Import python packages with different versions installed

virtualenv/pipenv也解决不了:同名/路径但code/版本不同的包必须安装在同一环境下,程序才能正常运行

考虑以下经典的菱形依赖问题:

  • 程序 <- feature_A <- 库 (v 1.0)
  • 程序 <- feature_B <- 库 (v 2.0)

假设我们可以完全访问包“program”、“feature_A”和“feature_B”的源代码,并且 feature_A 和 feature_B 都有以下代码:

import library.*

在像virtualenv、pip和conda这样的常规包管理器中,上述情况将排除feature_A和feature_B在同一个项目中使用。但是由于python是一种解释型语言,我们可以使用feature_A和feature_B的源代码。应该可以做以下事情:

  1. 获取library (v1.0)library (v2.0) 的包源代码/字节码,为每个生成 2 个加密哈希,并将它们安装在 2 个不同的路径下,这取决于它们各自的哈希值。

  2. 使用代码生成器重写 feature_Afeature_B,以便它们从依赖于加密哈希的新路径导入,并安装重写的版本。

  3. 使用代码生成器重写程序,使其从安装重写的feature_Afeature_B 的新路径导入.

现在我的问题是:完全自动化这个过程有多难?需要弱人工智能吗?或者可以使用纯函数逻辑来完成?

最佳答案

我会在不同的 PYTHONPATH 中安装不同的包版本,例如

PYTHONPATH=insertherepath1 ; python setup.py install --prefix=insertherepath1

PYTHONPATH=insertherepath1 ; pip install --install-option="--prefix=insertherepath1" package==v1

对于要安装在另一个路径 insertherepath2 中的其他版本的包也是如此。在不同的 PYTHONPATH 中的两个安装仍然可以访问主 python 路径中的其他常用安装包。

python 中使用不同的包:

import sys
sys.path.insert(0, 'insertherepath1')
import package #gets version 1
#maybe (depends on further dependencies) : sys.path.pop(0)

等同于使用其他版本:

import sys
sys.path.insert(0, 'insertherepath2')
import package #gets version 2
#maybe (depends on further dependencies) : sys.path.pop(0)

关于python - 在python环境下,如何导入特定版本的包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57837613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com