gpt4 book ai didi

python - 在虚拟环境中使用不同版本的相同库

转载 作者:行者123 更新时间:2023-11-28 17:32:46 32 4
gpt4 key购买 nike

我正在用 python 开发一个项目,它在多个模块中有依赖关系。

举个例子,我的主模块使用了另外两个模块,即module_1,它需要库lib_version_1.5module_2 使用相同的 library_but_version_1.8

module_1 和 module_2 都运行良好,现在我正在创建另一个结合这两者的模块。

那么我如何使用虚拟环境,以便将这两个与所有必需的库(不同版本)结合起来?是否可以在具有不同子模块的项目中安装同一库的不同版本?

最佳答案

请注意,python 命名空间非常强大。希望这个小示例对您有所帮助。

基本原理是将不同版本的同一个库添加到python的类路径中,并使它们具有不同的名称,这样就不会被覆盖。

import os, sys
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'libs'))

上面的代码将插入第三方库,该库位于项目基目录下的“libs”目录下。

假设我需要版本为 2.4.1 和 2.6.1 的 pycrypto,使用 pip install pycrypto==2.6.1 -t ./libsip install pycrypto==2.4。 1 -t ./libs 将两个版本安装到项目下的子目录中。安装后修改它们的名称,否则它将覆盖现有的。

将它们的名字分别修改为Crypto241和Crypto261。 What my project looks like

假设我将有两个模块(ModuleWIthCrypto241ModuleWithCrypto261),它们将分别导入 pycrypto 2.4.1 和 2.6.1。

ModuleWithCrypto261 代码:

def getCryproVersion(baseDir):
import os, sys
sys.path.insert(0, os.path.join(baseDir, 'libs'))
import Crypto261
return Crypto261.__version__

ModuleWIthCrypto241 代码:

def getCryproVersion(baseDir):
import os, sys
sys.path.insert(0, os.path.join(baseDir, 'libs'))
import Crypto241
return Crypto241.__version__

几乎一样,只是导入了不同版本的pycrypto。

然后我们有另一个脚本尝试获取两个不同版本的 pycrypto。modulewithdiffversion.py

它的样子:

import os, sys

from com.x import ModuleWIthCrypto241
from com.x import ModuleWithCrypto261
if __name__ == '__main__':
baseDir = os.path.dirname(os.path.abspath(__file__))
print ModuleWIthCrypto241.getCryproVersion(baseDir)
print ModuleWithCrypto261.getCryproVersion(baseDir)

执行main方法,会打印出两个版本的pycrypto:

2.4.1
2.6.1

希望对您有所帮助!

关于python - 在虚拟环境中使用不同版本的相同库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33208597/

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