在python环境中,如何从特定版本导入包?

2024-06-15 10:55:22 发布

您现在位置:Python中文网/ 问答频道 /正文

这不是问题的重复:

Import python packages with different versions installed

也无法通过virtualenv/pipenv解决该问题:共享相同名称/路径但具有不同代码/版本的包必须安装在同一环境下,程序才能正常运行

考虑到以下经典的钻石依赖问题:

  • 程序-功能-库(v1.0)
  • 程序-功能-库(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. 使用代码生成器重写program,以便它从安装重写的feature_A和{}的新路径导入。

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


Tags: 代码import路径程序功能版本virtualenv源代码
3条回答

安装特定版本

pip允许您使用版本说明符指定要安装的包的哪个版本。例如,要安装请求的特定版本:

pip install requests==2.18.4

要安装最新的2.x版请求:

pip install requests>=2.0.0,<3.0.0

要安装包的预发布版本,请使用--pre标志:

pip install --pre requests

我自己还没有遇到过这种情况。我的建议是重命名这些库,以便它们以不同的名称安装。在我看来这是最简单的方法。在

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

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

或者

^{pr2}$

对于要安装在另一个路径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)

相关问题 更多 >