You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用PIP升级项目其他依赖包,同时保留指定版本的NVIDIA CUDA相关包

如何使用PIP升级项目其他依赖包,同时保留指定版本的NVIDIA CUDA相关包

我太懂这种纠结了——好不容易配好适配50系显卡的CUDA相关包,升级其他依赖又怕把这些关键版本搞乱,简直是踩雷式操作!别慌,我给你捋几个靠谱的方法,既能升级你需要的其他包,又能牢牢锁住这些NVIDIA的核心依赖。

先纠正你之前踩的坑

你之前试的两个命令本身就有问题,难怪报错:

  • pip install --upgrade requirements.txt:少了-r参数!pip会把requirements.txt当成一个包的名字,当然找不到,正确的格式应该是pip install --upgrade -r requirements.txt,但直接这么用还是会动到CUDA包,所以不能直接用。
  • pip install --upgrade *:这个完全是用错了,*会被系统解析成当前目录的所有文件/文件夹,pip把这些当包名,不报错才怪😅

方法一:用约束文件锁死CUDA包版本(最稳妥,跨平台通用)

这个方法是给pip立个“规矩”:这些CUDA包的版本绝对不能改,其他包随便升级。

  1. 创建约束文件
    新建一个cuda-lock.txt文件,把你要保留的所有NVIDIA CUDA相关包和版本复制进去,就像这样:
nvidia-cublas-cu12==12.8.4.1
nvidia-cuda-cupti-cu12==12.8.90
nvidia-cuda-nvrtc-cu12==12.8.93
nvidia-cuda-runtime-cu12==12.8.90
nvidia-cudnn-cu12==9.10.2.21
nvidia-cufft-cu12==11.3.3.83
nvidia-cufile-cu12==1.13.1.3
nvidia-curand-cu12==10.3.9.90
nvidia-cusolver-cu12==11.7.3.90
nvidia-cusparse-cu12==12.5.8.93
nvidia-cusparselt-cu12==0.7.1
nvidia-nccl-cu12==2.27.5
nvidia-nvjitlink-cu12==12.8.93
nvidia-nvshmem-cu12==3.3.20
nvidia-nvtx-cu12==12.8.90
  1. 执行升级命令
    接下来用这个约束文件来升级你的依赖,命令如下:
pip install --upgrade -r requirements.txt -c cuda-lock.txt

这个命令的意思是:按照requirements.txt安装/升级包,但必须遵守cuda-lock.txt里的版本约束——CUDA包的版本绝对不能变,其他包正常升级到最新兼容版本。

方法二:直接过滤掉CUDA包升级(适合快速操作)

如果你不想额外建文件,也可以直接在命令里过滤掉所有NVIDIA开头的包,只升级剩下的:

适用于Linux/macOS(用grep过滤)

pip install --upgrade $(grep -vE "nvidia-" requirements.txt)

grep -vE "nvidia-"会把requirements.txt里所有以nvidia-开头的行去掉,只升级剩下的包。

适用于Windows PowerShell

pip install --upgrade (Get-Content requirements.txt | Where-Object { $_ -notmatch 'nvidia-' })

逻辑和上面一样,就是PowerShell的过滤语法不同而已。

额外提醒(避坑必备)

  1. 一定要用虚拟环境!
    这是老生常谈但绝对重要的点——把项目依赖隔离在虚拟环境里,就算搞砸了也不会影响系统全局的包,大不了删了虚拟环境重来,比直接在系统pip里操作安全100倍。

  2. 升级前先备份
    每次升级前,先导出当前所有包的版本到备份文件:

pip freeze > requirements-backup.txt

万一升级后出问题,直接用pip install -r requirements-backup.txt就能回滚到之前的状态。

  1. 处理依赖冲突
    如果升级时遇到某个包提示和CUDA版本冲突,别慌着改CUDA包!先去查这个包的官方文档,看它支持的CUDA版本范围,要么换这个包的兼容版本,要么确认是不是自己的约束哪里写错了——适配50系的CUDA版本本来就特殊,别轻易动它。

这样应该就解决你的问题了,试试第一个方法最稳妥,约束文件的方式也是pip官方推荐的,不容易出问题~

火山引擎 最新活动