Bootstrap

Anaconda,Conda环境安装xinference,报错 OSError(‘CUDA_HOME environment variable is not set. 解决方案

1.Anaconda的简单介绍和理解

首先在做项目的时候,涉及到使用anaconda。我脑子里面一头雾水,不知道anaconda是什么有什么用,对这个东西完全没有认识。

我现在简单的谈谈我的认识

1.1 自带各种包的python解释器

首先anaconda可以把它看做是一个自带的很多包的python解释器,比如我们一般使用纯净的python

比如python3.12

我们如果需要使用python的某些库和功能,我们一般需要先pip install xxx,比如如果你要安装numpy包,你需要在pycharm的终端里面输入如下命令。

pip install numpy

这种就是在终端里面输入命令行来安装包,然后你需要在你的代码里面做一个import导入,这样就可以使用numpy包了,如下面所示。


#import导入你已经安装好的numpy包
import numpy as np


# 创建一维数组
arr_1d = np.array([1, 2, 3, 4, 5])
print("一维数组:", arr_1d)

# 创建二维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("二维数组:\n", arr_2d)

# 数组的加法运算
arr_add = arr_1d + 2
print("一维数组每个元素加2后的结果:", arr_add)

# 二维数组的乘法运算(对应元素相乘)
arr_mul = arr_2d * 2
print("二维数组每个元素乘以2后的结果:\n", arr_mul)

那么anaconda首先你可以理解为,自带某些数据分析包的python解释器,不用你自己去装和数据分析领域相关的包了

以下大致是anaconda涉及到的包

数据分析与科学计算领域

  • Numpy:基础的科学计算库,提供了高性能的多维数组对象以及对这些数组进行操作的各种函数。可用于数学运算、线性代数、随机数生成等。广泛应用于数据分析、机器学习、科学研究等领域,如在数据预处理阶段对数据进行归一化、计算均值方差等统计量.
  • Pandas:用于数据处理和分析的强大库,提供了数据结构如 DataFrame 和 Series,方便进行数据读取、清洗、转换、合并等操作。常用于数据分析流程中的数据整理和初步探索,如处理 CSV、Excel 等格式的数据文件,进行数据筛选、排序、分组聚合等操作.
  • Scipy:在 Numpy 基础上构建的科学计算库,包含了众多的数学算法和工具,如数值积分、优化、信号处理、图像处理等。在科学研究和工程领域中,用于解决复杂的数学问题和数据处理任务,如物理模型的数值模拟、信号滤波等.
  • Matplotlib:用于绘制各种静态、动态和交互式图表的绘图库,支持折线图、散点图、柱状图、热图等多种图形。适用于数据可视化,能够将数据分析结果以直观的图形形式呈现,帮助用户更好地理解和解释数据,常用于科研报告、数据分析展示、工程分析等场景.机器学习与

机器学习与数据挖掘领域

  • Scikit-learn:提供了丰富的机器学习算法和工具,包括分类、回归、聚类、降维等算法,如决策树、支持向量机、朴素贝叶斯、K-Means 聚类等。可用于数据挖掘、预测分析、模式识别等任务,帮助开发人员快速构建和评估机器学习模型.
  • TensorFlow:一个广泛使用的深度学习框架,用于构建和训练各种神经网络模型,如卷积神经网络(CNN)、循环神经网络(RNN)及其变体。在图像识别、自然语言处理、语音识别等领域有广泛应用,可用于开发图像分类器、机器翻译系统、语音助手等人工智能应用.
  • Keras:基于 TensorFlow 等后端的高级神经网络 API,提供了简洁易用的接口,方便快速搭建和实验深度学习模型。适合初学者快速上手深度学习,能够快速构建和训练神经网络,如构建简单的手写数字识别模型等.
  • PyTorch:另一个流行的深度学习框架,以其动态计算图和简洁的编程风格受到欢迎。在学术界和工业界都有广泛应用,尤其在自然语言处理领域表现出色,可用于开发语言模型、文本生成、情感分析等应用.

其他领域

  • Biopython:用于计算分子生物学的工具和库,可进行DNA、RNA和蛋白质序列的读取、写入、比对和分析,以及蛋白质结构的预测、模拟和可视化等。应用于生物信息学、结构生物学、系统生物学等领域,帮助研究人员处理和分析生物学数据.
  • Requests:用于发送 HTTP 请求的库,简单易用,能够方便地与 Web 服务进行交互,获取网页数据、调用 API 等。在网络爬虫、数据采集、Web 开发等场景中经常使用,如爬取网页内容、获取天气预报数据等。
  • BeautifulSoup:用于解析 HTML 和 XML 文档的库,能够方便地从网页中提取所需的信息。常与 Requests 库配合使用,在网络爬虫中用于解析网页结构,提取文本、链接、图片等信息.
  • Jupyter Notebook:一种交互式的文档格式和开发环境,支持以单元格为单位的代码编写、运行和结果展示,能够实时查看代码的输出和修改代码。广泛应用于数据科学、教学、科研等领域,方便数据分析师、研究人员和教师记录和分享代码、数据和分析过程.

1.2 自动分析依赖

然后Anaconda可以自动分析相关依赖,自动安装各种组件,不容易报错。

这句话是什么意思?我来给你解释一下

比如我们平时在安装python的各种包的时候我们可以看到,它存在各种版本。但是每个软件包之间可能都会有若干个版本,比如A包版本是3.2,最新是4.0,然后B包最新版是1.3,这个时候你说我直接pip安装B包,然后再次运行程序,有可能就会报错。为什么?有可能你的B包版本太高,和解释器里面的A包发生了冲突,又或者你的python版本太低,兼容不了B包。

有非常多的可能性,我们需要一个个排查,那有没有一个软件,能够自动去帮我选择我应该安装哪个版本的B包呢?能够不仅匹配我的Python版本,而且还不会和我的A包版本发生冲突。

当然有啦,这就是Anaconda的conda安装功能。

自带的 conda 包管理器强大且智能,能够快速、准确地安装、更新和卸载库,并在处理库之间的依赖关系时表现出色。当安装一个新的库时,conda 会自动检测并安装该库所依赖的其他库,且确保它们的版本兼容性,节省了用户手动解决依赖问题的时间和精力,降低了由于依赖错误而导致的安装失败和运行时错误的风险

假如你要用Conda安装numpy,命令如下所示

conda install numpy

例如,要安装numpy包,可以在命令行(在 Windows 中是 “命令提示符” 或 “PowerShell”,在 Linux 和 macOS 中是 “终端”)中输入以下命令:

conda 会自动从 Anaconda 的软件包仓库中查找numpy包及其依赖项,并将它们下载并安装到当前激活的 Anaconda 环境中。杜绝了自己安装,然后报错版本等各种问题。

1.3 创建隔离环境,方便直接删除各种包

然后Anaconda还有一个功能,就是创建独立的隔离环境。(但这个不是独有的,其实pycharm自己就有一个类似的功能,pycharm也可以创建隔离的环境)

所以什么是独立环境,我最直观的感受就是:

首先,在独立环境下我们的解释器可以有两种,一种是全局的解释器(默认状态),一种是虚拟环境的解释器(需要创立虚拟环境然后我们设置)。

两种有什么区别呢?

比如全局下的解释器,你有一个毕业设计项目A,还有一个公司的项目B,你这个A项目用的解释器是python3.12(全局,安装在C盘一个默认的 ),含有numpy包,你在你的毕业设计项目中pip install numpy过后,B项目也可以用。

如果是conda或者pycharm虚拟环境下的解释器,那么所有安装的包和相关的解释器都在一个虚拟环境目录下,你所有和这个项目相关的包都在里面。

影响不了其他项目(比如你安装了numpy在这个虚拟环境里面),其他项目也就无法识别numpy包了,除非你手动设置其他项目也使用这个虚拟环境。所以如果你的C盘满了,你的某个项目也不用了,你可以直接删除这个项目的虚拟环境(包含各种包,某个版本的python解释器加起来可能占用若干个GB空间),释放空间。

具体如何激活CONDA或者pycharm虚拟环境就自己搜索一下吧。这里只是帮你理解。

下面展示一下如何调用conda或者pycharm env虚拟环境下的解释器和相关包。

打开pycharm设置,点击解释器这里,然后点击添加本地解释器。

然后这里你可以选是conda的虚拟环境还是pycharm自带的。我这里用的是conda,然后我就选择了我自己的conda环境

然后我们可以看到我自己的new312环境,点击即可重新加载解释器,完成虚拟环境解释器的选择。

--------------------------------------------------------------

2.安装xinference的思路和出现的问题

我的安装思路是

2.1 安装Anaconda

2.2 进入目标项目,创建单独的conda环境,选择python3.12

conda create --name yourname python=3.12

2.3 激活conda环境.

conda activate yourname

2.4 安装Pytorch(GPU CUDA版本)

进入pytorch官网安装相关包(自带了CUDA)。(或者用Conda安装),建议用pytorch官网安装,之前用Conda安装发生了报错,并且装成了CPU版本,我们需要的是带CUDA驱动的GPU版本。所以我这里就提供去官网安装的方法。如果你要知道conda安装方法,建议询问GPT获得命令行。

PyTorchicon-default.png?t=O83Ahttps://pytorch.org/

我这里安装的是CUDA12.4,版本太低了(CUDA11.8)的话,我的电脑上后续安装Xinference会报错。

先查看你的nvdia版本(如果你没有独立显卡的就不要看这个了,你直接安装CPU版本的cuda驱动)

具体安装步骤可以查看这个帖子,教你如何安装pytorch,但是帖子里面是安装的低版本,我建议直接跟着我来安装高版本。

//打开powershell或者cmd输入命令行
nvidia-smi

其中CUDA Version后是指最高支持的cuda版本,所以你要安装的pytorch能够调用的cuda不能超过这个地方12.7版本。所以我直接安装了12.4版本的pytorch。

复制最下面的RUN this command 到pycharm的终端里面安装就可以了(注意这个时候你的conda环境是激活的,不然你就直接安装到全局解释器去了,到时候删除环境的时候不会连着删除这个包,可能长时间占用c盘空间)。

 如果你看不懂我的 你可以再看看下面这个帖子

全网最稳妥通用的GPU版本Pytorch安装教程(Anaconda虚拟环境)_anacondon安装gpu版本的prtorch-CSDN博客文章浏览阅读1.2w次,点赞44次,收藏239次。文章提供了在Anaconda虚拟环境中安装GPU版本PyTorch的详细步骤,包括创建环境、确认CUDA版本、从PyTorch官网获取正确的pip安装命令,以及验证安装成功的技巧。强调了需下载与Python版本和CUDA版本匹配的whl文件,并通过pip安装。https://blog.csdn.net/m0_46128316/article/details/129711363

2.5 安装xinference(这一步报错UDA_HOME environment variable is not set. )

这一步我们在pycharm终端里面输入

pip install xinference[all]

由于conda库里面没有xinference,所以我们只能通过pip安装,所以conda不能帮我们解析依赖自动配置,防止报错。但是果不其然,用pip安装的下场,还是出现了报错(并且困扰了我很久)。

报错原因如图所示:

  error: subprocess-exited-with-error

 raise OSError('CUDA_HOME environment variable is not set. '
      OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root.
      conda_cuda_include_dir C:\Users\ultra\anaconda3\envs\new312\Lib\site-packages\nvidia/cuda_runtime/include

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

翻译一下就是CUDA_HOME 环境变量未设置。请将其设置为你的 CUDA 安装根目录

可是我们在2.4步骤的时候不是已经安装带有CUDA版本的pytorch了吗,按理来说cuda的路径是已经配置好了,不用我们再去设置了,所以是为什么呢?

然后我去看了下面这篇帖子。

解决OSError: CUDA_HOME environment variable is not set. Please set it to your CU_cuda home environment variable is not set-CSDN博客文章浏览阅读1.3w次,点赞12次,收藏25次。在大多数情况下,上述 cudatoolkit 是可以满足 Pytorch 等框架的使用需求的。但对于一些特殊需求,如需要为 Pytorch 框架添加 CUDA 相关的拓展时( Custom C++ and CUDA Extensions ),需要对编写的 CUDA 相关的程序进行编译等操作,则需安装完整的 Nvidia 官方提供的 CUDA Toolkit.C++Extension有对CUDA的依赖,并且此cuda需要是电脑安装的而不是使用anaconda下载的cudatookit。重启计算机,即可解决。_cuda home environment variable is not sethttps://blog.csdn.net/weixin_44001371/article/details/128113557C++Extension有对CUDA的依赖,并且此cuda需要是电脑安装的而不是使用anaconda下载,或者pip的cudatookit。

意思就是我们还要去NVDIA官网再安装一个官方驱动。然后配置环境变量,才能解决问题。

CUDA Toolkit - Free Tools and Training | NVIDIA Developer

下载CUDA,然后安装,可以先不配置系统变量,因为一般会自动配置,驱动请安装在C盘默认地址,不然后面又要报错

然后继续安装xinference试试

pip install xinference

如果实在还是配置有问题,可以进行下面的设置(如果上一部运行成功可以直接忽略):
1. 安装后在系统环境变量设置可以看到(路径为默认安装路径)

2. 再添加一个与CUDA_PATH相同路径的CUDA_HOME
在这里插入图片描述
重启计算机,即可解决

2.6 安装NVDIA驱动后,重新安装xinference又出现llama-cpp-python报错

Building wheel for llama-cpp-python (pyproject.toml) did not run successfully.

      2024-01-15 02:55:12,546 - scikit_build_core - WARNING - Can't find a Python library, got libdir=None, ldlibrary=None, multiarch=None, masd=None
      loading initial cache file C:\Windows\TEMP\tmpyjbtivnu\build\CMakeInit.txt
      -- Building for: NMake Makefiles
      CMake Error at CMakeLists.txt:3 (project):
        Running

         'nmake' '-?'

        failed with:

         no such file or directory
      CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
      CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage

  error: subprocess-exited-with-error

  × Building wheel for llama-cpp-python (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [20 lines of output]
      *** scikit-build-core 0.7.1 using CMake 3.28.1 (wheel)
      *** Configuring CMake...
      2024-01-15 02:55:12,546 - scikit_build_core - WARNING - Can't find a Python library, got libdir=None, ldlibrary=None, multiarch=None, masd=None
      loading initial cache file C:\Windows\TEMP\tmpyjbtivnu\build\CMakeInit.txt
      -- Building for: NMake Makefiles
      CMake Error at CMakeLists.txt:3 (project):
        Running

         'nmake' '-?'

        failed with:

         no such file or directory


      CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
      CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
      -- Configuring incomplete, errors occurred!

      *** CMake configuration failed
      [end of output]

在安装llama-cpp-python包时遇到的错误,涉及到CMake配置失败和需要VisualStudio2022+C++构建工具的情况。

解决方法是安装VisualStudio2022全版,包括C++桌面开发组件。具体可以参考下面这个文章

Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj_error: could not build wheels for llama-cpp-python-CSDN博客文章浏览阅读7.2k次,点赞16次,收藏15次。文章描述了用户在安装llama-cpp-python包时遇到的错误,涉及到CMake配置失败和需要VisualStudio2022+C++构建工具的情况。解决方法是安装VisualStudio2022全版,包括C++桌面开发组件。https://blog.csdn.net/qq_45719856/article/details/135591950所以需要新装个VisualStudio 2022 + C++ building tool再重新安装xinference

在这里插入图片描述
必须勾选C++桌面开发(10G+),没错就是这么大
在这里插入图片描述
 

然后安装完毕后再运行,xinference的安装代码

pip install xinference[all]

按理说这样就应该能成功运行了吧。但是(想骂人),我又出现了一个错误,但一般你们不会再出现了。所以后面如果你也出现了,可以看2.7 module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
 

2.7 module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?,安装完VSCODE后可能还会出现的错误(可选阅读)

  error: subprocess-exited-with-error

  × pip subprocess to install build dependencies did not run successfully.
  │ exit code: 1
  ╰─> [63 lines of output]
      Collecting setuptools
        Downloading setuptools-75.6.0-py3-none-any.whl.metadata (6.7 kB)
      Collecting wheel
        Downloading wheel-0.45.1-py3-none-any.whl.metadata (2.3 kB)
      Collecting cython==0.29.35
        Downloading Cython-0.29.35-py2.py3-none-any.whl.metadata (3.1 kB)
      Collecting numpy==1.24.3
        Downloading numpy-1.24.3.tar.gz (10.9 MB)
           ---------------------------------------- 10.9/10.9 MB 4.1 MB/s eta 0:00:00
        Installing build dependencies: started
        Installing build dependencies: finished with status 'done'
        Getting requirements to build wheel: started
        Getting requirements to build wheel: finished with status 'error'
        error: subprocess-exited-with-error

        Getting requirements to build wheel did not run successfully.
        exit code: 1

        [33 lines of output]
        Traceback (most recent call last):
          File "C:\Users\ultra\anaconda3\envs\new312\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 353, in <module>
            main()
          File "C:\Users\ultra\anaconda3\envs\new312\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 335, in main
            json_out['return_val'] = hook(**hook_input['kwargs'])
                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          File "C:\Users\ultra\anaconda3\envs\new312\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 112, in get_requires_for_build_wheel
            backend = _build_backend()
                      ^^^^^^^^^^^^^^^^
          File "C:\Users\ultra\anaconda3\envs\new312\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 77, in _build_backend
            obj = import_module(mod_path)
                  ^^^^^^^^^^^^^^^^^^^^^^^
          File "C:\Users\ultra\anaconda3\envs\new312\Lib\importlib\__init__.py", line 90, in import_module
            return _bootstrap._gcd_import(name[level:], package, level)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
          File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
          File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
          File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
          File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
          File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
          File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
          File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
          File "<frozen importlib._bootstrap_external>", line 999, in exec_module
          File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
          File "C:\Users\ultra\AppData\Local\Temp\pip-build-env-sbi2vlun\overlay\Lib\site-packages\setuptools\__init__.py", line 16, in <module>
            import setuptools.version
          File "C:\Users\ultra\AppData\Local\Temp\pip-build-env-sbi2vlun\overlay\Lib\site-packages\setuptools\version.py", line 1, in <module>
            import pkg_resources
          File "C:\Users\ultra\AppData\Local\Temp\pip-build-env-sbi2vlun\overlay\Lib\site-packages\pkg_resources\__init__.py", line 2172, in <module>
            register_finder(pkgutil.ImpImporter, find_on_path)
                            ^^^^^^^^^^^^^^^^^^^
        AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
        [end of output]
        note: This error originates from a subprocess, and is likely not a problem with pip.
      error: subprocess-exited-with-error

      Getting requirements to build wheel did not run successfully.
      exit code: 1

      See above for output.
      note: This error originates from a subprocess, and is likely not a problem with pip.
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.

解决该问题的步骤:pip install 报错 AttributeError: module ‘pkgutil‘ has no attribute ‘ImpImporter‘_attributeerror: module 'pkgutil' has no attribute -CSDN博客文章浏览阅读646次。应该是包的版本不太兼容,需要升级一下,使用下面的命令。新配置一个电脑+ python 工具。pip 安装的报这个错。_attributeerror: module 'pkgutil' has no attribute 'impimporter'. did you meahttps://blog.csdn.net/lyclsle/article/details/143063058?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522f216a6745156f97a5f19b0829be33b1a%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=f216a6745156f97a5f19b0829be33b1a&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-143063058-null-null.142%5Ev100%5Epc_search_result_base8&utm_term=%20AttributeError%3A%20module%20pkgutil%20has%20no%20attribute%20ImpImporter.%20Did%20you%20mean%3A%20zipimporter&spm=1018.2226.3001.4187

解决步骤:

这是关于在 Python 3.12 环境下安装工具时,遇到的 pkgutildistutils 相关的兼容性问题。以下是总结和解决方案:

问题分析

  1. 错误信息

    • AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
    • 这个错误是由于 Python 3.12 开始,pkgutil 模块不再包含 ImpImporter,导致某些安装包的处理出现问题。
  2. ModuleNotFoundError: No module named 'distutils'

    • 在 Python 3.12 中,distutils 被移除,很多工具和包(如 setuptools)依赖于 distutils,因此会遇到缺少 distutils 的问题。

解决方案

1. 升级 pip
  • 通过 ensurepip 来确保 pip 是最新版本,这有助于解决某些安装包的兼容性问题。

  • 对于 macOS/Unix/Linux

    python -m ensurepip --upgrade
    
  • 对于 Windows

    py -m ensurepip --upgrade
    
2. 安装 setuptools
  • setuptools 是一个处理 Python 软件包的工具包,它依赖于 distutils。在 Python 3.12 中,由于没有 distutils,你需要安装 setuptools 来间接解决这个问题。

  • 安装 setuptools

    pip install setuptools
    
  • 如果提示已经安装了,可以先卸载旧版本再重新安装:

    pip uninstall setuptools
    pip install setuptools
    
3. 安装其他工具
  • 如果安装时遇到 distutils 缺失,可以使用 setuptools 替代,setuptools 会自动解决相关依赖问题。

总结

  • Python 3.12 中移除了 distutils,导致一些包(如 setuptools)无法正常安装或执行。安装或升级 setuptools 可以解决大部分问题。
  • 升级 pip 并安装或重新安装 setuptools 是解决该问题的主要方法。

2.8 重新再安装Xinference

pip install xinference

解决所有问题!!

;