pip install -r requirements.txt 最稳妥,因conda install --file对包名格式、版本号、注释行敏感,不支持pip语法(如>=、url、pep 508标记),易报错中断;pip则兼容性强,支持注释、可选依赖、条件标记等。

直接用 pip install -r requirements.txt 最稳妥,别一上来就硬上 conda install --file —— 它对包名、版本号、注释行都更敏感,容易卡住。
为什么 conda install --file requirements.txt 经常失败
这个命令要求 requirements.txt 里的每一行都必须是 conda 能识别的包名格式(比如 numpy=1.21.0),不能有 pip 风格的写法(如 torch>=2.0.0、requests[security]、带 URL 的包、PEP 508 环境标记),也不支持 # 开头的注释行。一旦某行不合规,整个命令就中断,报 PackageNotFoundError 或 UnsatisfiableError。
- 常见错误现象:
CondaValueError: could not parse 'torch==2.0.0+cu118' as a version、ResolvePackageNotFound - 它不会跳过错误行,也不会自动 fallback 到 pip
- 即使你用了清华源,也解决不了语法不兼容问题
pip install -r requirements.txt 是默认首选
绝大多数 Python 项目生成的 requirements.txt 都是 pip 格式,pip 对语法宽容得多:支持注释、可选依赖、URL 包、PEP 508 条件、甚至本地路径。只要你的环境里有 pip(conda 创建的环境默认自带),就该优先用它。
- 确保你在目标虚拟环境中执行:
conda activate myenv后再运行pip install -r requirements.txt - 如果包里含 C 扩展(如
numpy、scipy),pip 会自动下载对应平台的 wheel,比 conda 更快匹配 - 遇到个别 conda-only 包(如
mkl、blas)装不上?先跳过,后续单独用conda install补
真要用 conda 批量装,得预处理 requirements.txt
如果你明确需要 conda 生态(比如要统一 MKL、CUDA 工具链),就不能直接喂原始文件。得先清洗或转换:
- 删掉所有
#开头的注释行和空行 - 把
pkg>=x.y改成pkg x.y(conda 不认>=) - 把
torch==2.0.0+cu118拆成pytorch(conda channel 里叫这个名字) - 把
git+https://...这类行手动替换为 conda 可安装的等价包,或干脆删掉留待后续手动处理 - 清洗后保存为
requirements_conda.txt,再执行:conda install --yes --file requirements_conda.txt
混合安装时的 fallback 写法(慎用)
网上流传的 while read r; do conda install --yes $r || pip install $r; done 看似聪明,实则风险高:
- 变量未引号包裹,含空格或特殊字符的包名会崩(如
scikit-learn可能被拆成scikit-和learn) - conda 安装失败后 pip 会尝试装同一行(比如
torch==2.0.0+cu118),而 pip 也解不了这个版本字符串,最终两败俱伤 - 没有去重、无日志、无法回溯哪一行出了问题
- 真正可靠的做法是:先用 pip 主流程装,再人工检查
conda list输出,对关键包(如numpy、pytorch)用 conda 单独重装以保证底层一致
最易被忽略的一点:requirements.txt 里混着 -e . 或 -r other.txt 这类 pip 特有指令,conda 完全不认识——它们会在 pip 流程里生效,但在 conda 流程里直接报错。别指望一条命令包打天下,得看清楚文件内容再选工具。











