应优先统一使用conda-forge通道、避免混用pip与conda安装、显式指定-c conda-forge安装、启用channel_priority strict、改用mamba求解器或重建环境。

conda install 时提示 “PackagesNotFoundError” 或 “UnsatisfiableError” 怎么办
这不是网络问题,而是 conda 在当前 channel 组合下找不到满足所有约束的二进制包组合。尤其在混用 pip 安装和 conda install 之后,环境状态容易脱离 conda 的依赖图管理。
核心思路是:让 conda 管理全部科学计算栈(numpy、scipy、pytorch、tensorflow 等),避免 pip 插手底层 C 扩展库。
- 先运行
conda list检查是否有pip安装的包(Status 列显示pip);若有,优先用conda remove --force卸载后重装 - 添加官方科学计算优先 channel:
conda config --add channels conda-forge(conda-forge更新更及时,且对linux-aarch64/osx-arm64支持更好) - 安装时显式指定 channel:
conda install -c conda-forge numpy scipy matplotlib,避免默认defaultschannel 的旧版二进制包拖累求解 - 不要用
conda install package==x.y.z锁死小版本——conda 的依赖求解器对 == 约束极度敏感,改用>=x.y或直接不写版本让 conda 自行推导
为什么 conda env create -f environment.yml 仍会失败?
常见原因是 environment.yml 里混写了 pip 和 conda 依赖,且 pip 部分引用了含本地编译逻辑的包(如 llvmlite、numba),导致 conda 求解器放弃整条路径。
实操建议:
- 把
pip下的包全部移出environment.yml,单独用requirements.txt管理,并确保只在 conda 环境创建完成后再执行pip install -r requirements.txt - 检查
environment.yml中是否包含python: 3.12这类新版本——截至 2024 年中,pytorch、tensorflow在conda-forge上对 Python 3.12 的 wheel 支持仍不完整,降级到python=3.11可绕过大量冲突 - 使用
mamba替代conda:安装mamba后运行mamba env create -f environment.yml,其求解器比原生 conda 快 5–10 倍,且对复杂约束更鲁棒
conda install pytorch 后 import torch 报 “OSError: libtorch_cpu.so: cannot open shared object file”
这是典型的二进制链接断裂:conda 安装的 pytorch 依赖的底层库(如 libtorch_cpu.so)未被 runtime linker 发现,常发生在非标准 prefix 路径或跨 channel 混装时。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
验证与修复步骤:
- 运行
ldd $(python -c "import torch; print(torch.__file__)") | grep "not found",确认缺失的 so 文件名 - 查这些 so 属于哪个包:
conda search --info libtorch-cpu(注意不是pytorch,而是其子组件包) - 若输出为空,说明该 so 来自
pytorch自带但未声明依赖——此时应换 channel 安装:conda install -c pytorch pytorch(官方 channel 的构建更自洽) - 临时修复可加
LD_LIBRARY_PATH:export LD_LIBRARY_PATH=$(conda list -p | head -1)/lib:$LD_LIBRARY_PATH,但这是权宜之计,不能解决环境可复现性问题
用 conda 创建多 Python 版本环境时,为什么 scipy 总降级到 1.9.x?
因为 scipy>=1.10 开始要求编译器支持 C++17,而 conda 默认 channel 中部分 Python 3.9/3.10 构建环境未启用对应 flags,导致只有旧版 scipy 能提供预编译二进制包。
解决方案很直接:
- 坚持用
conda-forge:conda create -n py310-scipy110 -c conda-forge python=3.10 scipy=1.11(conda-forge已全线启用 C++17 编译) - 避免混合 channel:
conda-forge和pytorchchannel 可共存,但不要混用defaults+conda-forge——前者会强行降级后者提供的新版包 - 检查
.condarc是否有channel_priority: strict,没有就加上,否则 conda 会回退到低优先级 channel 找“能装上的包”,而非“最新兼容的包”
真正麻烦的从来不是某个报错信息,而是 conda 环境里同时存在多个 channel 提供的同名包、不同构建字符串(build string)的同一版本、以及 pip 插入的 ABI 不兼容二进制——这些不会立刻报错,但会在调用 scipy.linalg.svd 或 torch.compile 时突然 segfault。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










