如何在同一虚拟环境中让tensorflow-rocm与torch适配不同依赖版本?
同一虚拟环境下兼容不同版本typing-extensions的方案
以下几种方法可以让tensorflow-rocm和torch分别使用对应版本的typing-extensions,无需新建虚拟环境:
1. 分脚本指定依赖路径(推荐)
先把两个版本的typing-extensions安装到不同的自定义目录,再通过修改Python的模块加载路径,让不同脚本优先加载对应版本:
- 安装两个版本到自定义位置:
# 安装4.5.0版本到~/custom_pkgs/typing_ext_450 pip install typing-extensions==4.5.0 --target ~/custom_pkgs/typing_ext_450 # 安装4.8.0版本到~/custom_pkgs/typing_ext_480 pip install typing-extensions==4.8.0 --target ~/custom_pkgs/typing_ext_480 - 运行tensorflow的脚本开头添加路径指定:
import sys # 让Python优先加载4.5.0版本的目录 sys.path.insert(0, "~/custom_pkgs/typing_ext_450") import tensorflow as tf # 后续正常使用tensorflow即可 - 运行torch的脚本开头添加路径指定:
注意:这种方法要求两个库在独立的进程中运行,不能在同一个脚本里同时导入tensorflow和torch,否则会出现版本冲突。import sys # 让Python优先加载4.8.0版本的目录 sys.path.insert(0, "~/custom_pkgs/typing_ext_480") import torch # 后续正常使用torch即可
2. 手动加载指定版本模块(进阶)
如果需要在同一个脚本里先后使用两个库,可以通过importlib手动加载对应版本的typing-extensions,切换时刷新模块缓存:
import importlib.util import sys # 加载4.5.0版本供tensorflow使用 spec_450 = importlib.util.spec_from_file_location( "typing_extensions", "~/custom_pkgs/typing_ext_450/typing_extensions/__init__.py" ) typing_ext_450 = importlib.util.module_from_spec(spec_450) sys.modules["typing_extensions"] = typing_ext_450 spec_450.loader.exec_module(typing_ext_450) import tensorflow as tf # 切换到4.8.0版本供torch使用 del sys.modules["typing_extensions"] spec_480 = importlib.util.spec_from_file_location( "typing_extensions", "~/custom_pkgs/typing_ext_480/typing_extensions/__init__.py" ) typing_ext_480 = importlib.util.module_from_spec(spec_480) sys.modules["typing_extensions"] = typing_ext_480 spec_480.loader.exec_module(typing_ext_480) import torch
注意:部分库导入时会缓存依赖模块,这种切换可能引发不可预见的问题,仅在必要时使用。
3. 修改库的依赖引用(风险较高)
可以通过修改tensorflow的内部导入逻辑,让它指向单独安装的4.5.0版本:
- 先安装torch和对应的4.8.0版本:
pip install torch - 安装4.5.0到自定义目录:
pip install typing-extensions==4.5.0 --target ~/custom_pkgs/typing_ext_450 - 找到虚拟环境中tensorflow的安装路径(比如
~/.local/venv/lib/python3.10/site-packages/tensorflow) - 删除tensorflow默认的typing-extensions引用,创建软链接指向4.5.0版本:
rm -rf ~/.local/venv/lib/python3.10/site-packages/tensorflow/_typing_extensions ln -s ~/custom_pkgs/typing_ext_450/typing_extensions ~/.local/venv/lib/python3.10/site-packages/tensorflow/_typing_extensions - 批量修改tensorflow源码中所有
import typing_extensions的语句,替换为import tensorflow._typing_extensions as typing_extensions
注意:这种方法需要修改库的源码,后续tensorflow更新后会失效,仅作为临时应急方案。
内容的提问来源于stack exchange,提问作者Dlinui Dial
相关产品推荐
相关产品推荐

