conda环境下ERROR: Cannot uninstall ‘TBB‘问题解决

1 问题描述

conda环境下执行mkl安装,报如下错误:

(base) [root@localhost video-retalking]# pip install mkl==2022.2.1
Looking in indexes: https://mirrors.aliyun.com/pypi/simple
Collecting mkl==2022.2.1
  Using cached https://mirrors.aliyun.com/pypi/packages/3c/13/8445ec0b958830f2342280193fd9271c261db9bbdb2f07e418dfe649ca1e/mkl-2022.2.1-py2.py3-none-manylinux1_x86_64.whl (259.9 MB)
Collecting intel-openmp==2022.* (from mkl==2022.2.1)
  Using cached https://mirrors.aliyun.com/pypi/packages/ae/56/e23cd9e2611ce3ef4395fa9af1da28ee91df43395456df8dba078d5a1630/intel_openmp-2022.2.1-py2.py3-none-manylinux1_x86_64.whl (12.6 MB)
Collecting tbb==2021.* (from mkl==2022.2.1)
  Using cached https://mirrors.aliyun.com/pypi/packages/31/fc/eeb2ab19f26e608bda910350b6f0a06e8dd1b472049b175ca36df93c81ff/tbb-2021.11.0-py2.py3-none-manylinux1_x86_64.whl (5.4 MB)
Installing collected packages: tbb, intel-openmp, mkl
  Attempting uninstall: tbb
    Found existing installation: TBB 0.2
ERROR: Cannot uninstall 'TBB'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

强制更新TBB:

pip install --ignore-installed TBB==2021.11.0
Looking in indexes: https://mirrors.aliyun.com/pypi/simple
Collecting TBB==2021.11.0
  Using cached https://mirrors.aliyun.com/pypi/packages/31/fc/eeb2ab19f26e608bda910350b6f0a06e8dd1b472049b175ca36df93c81ff/tbb-2021.11.0-py2.py3-none-manylinux1_x86_64.whl (5.4 MB)
Installing collected packages: TBB
Successfully installed TBB-0.2

继续执行mkl安装:

(base) [root@localhost video-retalking]# pip install mkl==2022.2.1
Looking in indexes: https://mirrors.aliyun.com/pypi/simple
Collecting mkl==2022.2.1
  Using cached https://mirrors.aliyun.com/pypi/packages/3c/13/8445ec0b958830f2342280193fd9271c261db9bbdb2f07e418dfe649ca1e/mkl-2022.2.1-py2.py3-none-manylinux1_x86_64.whl (259.9 MB)
Collecting intel-openmp==2022.* (from mkl==2022.2.1)
  Using cached https://mirrors.aliyun.com/pypi/packages/ae/56/e23cd9e2611ce3ef4395fa9af1da28ee91df43395456df8dba078d5a1630/intel_openmp-2022.2.1-py2.py3-none-manylinux1_x86_64.whl (12.6 MB)
Collecting tbb==2021.* (from mkl==2022.2.1)
  Using cached https://mirrors.aliyun.com/pypi/packages/31/fc/eeb2ab19f26e608bda910350b6f0a06e8dd1b472049b175ca36df93c81ff/tbb-2021.11.0-py2.py3-none-manylinux1_x86_64.whl (5.4 MB)
Installing collected packages: tbb, intel-openmp, mkl
  Attempting uninstall: tbb
    Found existing installation: TBB 0.2
ERROR: Cannot uninstall 'TBB'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

系统依然报错,TBB已存在。

使用pip强制拆卸

(base) [root@localhost video-retalking]# pip uninstall --ignore-installed TBB

Usage:   
  pip uninstall [options] <package> ...
  pip uninstall [options] -r <requirements file> ...

no such option: --ignore-installed
(base) [root@localhost video-retalking]# pip uninstall TBB
Found existing installation: TBB 0.2
ERROR: Cannot uninstall 'TBB'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

依然删除失败。

2 问题分析

使用底层工具 distutils安装的自带package,缺失了文件列表信息,导致无法根据文件列表卸载旧版,无法替换旧版文件,无法干净地升级,所以python拒绝安装或者升级某个package。此问题为遗留问题,深层bug,官方无法漂亮地解决

3 解决方案

手动删除这个包,再用pip或者conda安装,新的版本就都会带有完整的文件列表信息了。

(base) [root@localhost video-retalking]# find / -name "llvmlite"
/root/stable-diffusion-webui/venv/lib/python3.8/site-packages/llvmlite
/root/anaconda3/pkgs/llvmlite-0.36.0-py38h612dafd_4/lib/python3.8/site-packages/llvmlite
/root/anaconda3/pkgs/llvmlite-0.40.0-py38he621ea3_0/lib/python3.8/site-packages/llvmlite
/root/anaconda3/pkgs/llvmlite-0.41.1-py38h94a1851_0/lib/python3.8/site-packages/llvmlite
/root/anaconda3/lib/python3.8/site-packages/llvmlite
/root/anaconda3/envs/sadtalker/lib/python3.8/site-packages/llvmlite
/root/anaconda3/envs/wav2lip/lib/python3.6/site-packages/llvmlite
/root/anaconda3/envs/GFPGAN/lib/python3.8/site-packages/llvmlite
/root/anaconda3/envs/gfpgan/lib/python3.8/site-packages/llvmlite
/root/anaconda3/envs/vits2/lib/python3.9/site-packages/llvmlite
/root/anaconda3/envs/retalking/lib/python3.8/site-packages/llvmlite
/opt/stable-diffusion-webui/venv/lib/python3.8/site-packages/llvmlite

手动删除(为保险起见,重命名这个包):

mv /root/anaconda3/lib/python3.8/site-packages/llvmlite /root/anaconda3/lib/python3.8/site-packages/llvmlite_bak

执行删除命令:

conda uninstall TBB

再次运行mkl安装

(base) [root@localhost video-retalking]# pip install mkl==2022.2.1
Looking in indexes: https://mirrors.aliyun.com/pypi/simple
Collecting mkl==2022.2.1
  Downloading https://mirrors.aliyun.com/pypi/packages/3c/13/8445ec0b958830f2342280193fd9271c261db9bbdb2f07e418dfe649ca1e/mkl-2022.2.1-py2.py3-none-manylinux1_x86_64.whl (259.9 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 259.9/259.9 MB 1.2 MB/s eta 0:00:00
Collecting intel-openmp==2022.* (from mkl==2022.2.1)
  Downloading https://mirrors.aliyun.com/pypi/packages/ae/56/e23cd9e2611ce3ef4395fa9af1da28ee91df43395456df8dba078d5a1630/intel_openmp-2022.2.1-py2.py3-none-manylinux1_x86_64.whl (12.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.6/12.6 MB 1.2 MB/s eta 0:00:00
Requirement already satisfied: tbb==2021.* in /root/anaconda3/lib/python3.8/site-packages (from mkl==2022.2.1) (2021.11.0)
Installing collected packages: intel-openmp, mkl
  Attempting uninstall: intel-openmp
    Found existing installation: intel-openmp 2024.0.0
    Uninstalling intel-openmp-2024.0.0:
      Successfully uninstalled intel-openmp-2024.0.0
Successfully installed intel-openmp-2022.2.1 mkl-2022.2.1

安装成功,问题解决。

 4 conda环境介绍

Conda是一个开源的包管理器和环境管理系统,用于安装、运行和更新包和其依赖项。它是由Anaconda, Inc.(以前称为Continuum Analytics)创建,用于支持Python程序开发,但它也可以用来管理来自其他语言的包。Conda使得包管理和环境隔离变得简单,对于处理多个项目中的依赖关系和版本控制尤其有用。

Conda是一个强大的工具,对于管理复杂的Python项目和环境至关重要。它简化了包管理和环境设置,使得Python开发更加容易和高效。通过使用Conda,开发者可以确保他们的项目在不同机器和操作系统上都能以相同的方式运行,大大提高了项目的可移植性和可复现性。

4.1 Conda的核心功能

  • 包管理:Conda作为包管理器,可以安装、更新和移除Python包。它通过Conda仓库,如Anaconda Cloud或Conda Forge,来获取包。

  • 环境管理:Conda允许用户创建隔离的环境,以便于不同项目可以拥有不同的库和/或Python版本。这在处理不兼容的依赖项或不同项目的需求时非常有用。

  • 跨平台:Conda支持Linux、OS X和Windows,并允许创建跨平台的Python环境。

  • 开源:Conda是开源的,允许用户查看源代码并对其进行改进。

4.2 使用Conda的优势

  • 解决依赖性问题:Conda可以自动解决包之间的依赖关系,简化了安装过程。

  • 环境隔离:创建独立的环境可以避免包之间的版本冲突,使得项目更稳定。

  • 易于使用:Conda的命令行界面简单直观,易于学习和使用。

  • 广泛的包支持:Conda支持Python的许多流行库和应用程序。

  • 社区支持:作为一个流行的工具,Conda拥有一个活跃的社区,用户可以从中找到支持和资源。

4.3 Conda环境的创建和管理

  • 创建新环境:使用conda create命令创建一个新环境,可以指定Python版本和所需的包。

  • 激活环境:使用conda activate命令来激活环境。

  • 安装包:在激活的环境中使用conda install命令来安装新的包。

  • 环境列表:使用conda env list来查看所有可用的Conda环境。

  • 移除环境:使用conda env remove命令来移除不再需要的环境。

4.4 应用场景

  • 数据科学和机器学习:Conda非常适合于数据科学和机器学习项目,这些项目通常需要多个库和框架。

  • 软件开发:软件开发者使用Conda来管理项目依赖,确保一致的开发环境。

  • 教学和学术研究:教师和研究人员使用Conda来创建具有特定库和工具的环境,用于教学和研究。

4.5 常用命令

Conda 是一个开源的包管理器和环境管理器,广泛用于管理Python环境和包。以下是一些常用的 Conda 命令:

  • 安装 Conda 包:

    • conda install [package-name]: 安装指定的包。
  • 创建和管理环境:

    • conda create --name [env-name]: 创建一个新的环境。
    • conda activate [env-name]: 激活指定环境。
    • conda deactivate: 退出当前环境。
    • conda env list: 列出所有可用的环境。
  • 管理包:

    • conda list: 在当前环境中列出所有已安装的包。
    • conda update [package-name]: 更新指定的包。
    • conda remove [package-name]: 移除指定的包。
  • 搜索包:

    • conda search [package-name]: 搜索可用的包版本。
  • 环境导出和导入:

    • conda env export > environment.yml: 导出当前环境的配置到一个YAML文件。
    • conda env create -f environment.yml: 使用YAML文件创建一个新环境。
  • 更新 Conda:

    • conda update conda: 更新 Conda 到最新版本。
  • 查看 Conda 信息:

    • conda info: 显示关于 Conda 的信息。

猜你喜欢

转载自blog.csdn.net/lsb2002/article/details/134956864