如何使用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包的版本绝对不能改,其他包随便升级。
- 创建约束文件
新建一个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
- 执行升级命令
接下来用这个约束文件来升级你的依赖,命令如下:
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的过滤语法不同而已。
额外提醒(避坑必备)
一定要用虚拟环境!
这是老生常谈但绝对重要的点——把项目依赖隔离在虚拟环境里,就算搞砸了也不会影响系统全局的包,大不了删了虚拟环境重来,比直接在系统pip里操作安全100倍。升级前先备份
每次升级前,先导出当前所有包的版本到备份文件:
pip freeze > requirements-backup.txt
万一升级后出问题,直接用pip install -r requirements-backup.txt就能回滚到之前的状态。
- 处理依赖冲突
如果升级时遇到某个包提示和CUDA版本冲突,别慌着改CUDA包!先去查这个包的官方文档,看它支持的CUDA版本范围,要么换这个包的兼容版本,要么确认是不是自己的约束哪里写错了——适配50系的CUDA版本本来就特殊,别轻易动它。
这样应该就解决你的问题了,试试第一个方法最稳妥,约束文件的方式也是pip官方推荐的,不容易出问题~




