You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止conda env export修改特定依赖配置

问题场景

以下是初始的environment.yml文件片段:

name: my-project
channels:
  - pytorch-nightly
  - defaults
dependencies:
  - pytorch=1.13.0.*
  - pip:
    - https://github.com/explosion/spacy-models/releases/download/nb_core_news_md-3.3.0/nb_core_news_md-3.3.0-py3-none-any.whl
prefix: ~/opt/miniconda3/envs/my-project

执行conda env create -f environment.yml创建环境后,运行conda env export > environment.yml重新导出配置,文件会出现两处不符合预期的变更:

name: my-project
channels:
  - pytorch-nightly
  - defaults
dependencies:
  - pytorch=1.13.0.dev20220614=py3.9_0
  - pip:
    - nb-core-news-md==3.3.0
prefix: ~/opt/miniconda3/envs/my-project

隔天用这个导出的文件重建环境时会触发两个报错:

  • PyTorch nightly版本是每日滚动更新的,旧的dev构建pytorch=1.13.0.dev20220614=py3.9_0会被删除,无法找到对应安装包
  • nb-core-news-md是通过whl直链安装的,导出后URL被移除,换成了普通的版本号格式,公开源中不存在这个包,无法安装

需求为:conda env export导出时继续锁定其余所有依赖的具体版本,仅不对上述两个依赖项做固化修改。

解决方案

按以下步骤操作即可,完全满足「其余依赖全锁、仅这两项保留灵活配置」的要求:

  1. 导出时跳过pytorch的自动版本固化
    Conda 4.9及以上版本提供了--exclude参数,可以指定导出时跳过特定包的版本解析,执行以下命令导出环境:
    conda env export --exclude pytorch > environment.yml
    
    这一步导出的文件会自动锁定除pytorch外所有conda依赖的完整版本+构建号,不会出现固定死的nightly dev版本条目。
  2. 手动修正两个特殊依赖的配置
    打开导出的environment.yml做两处修改:
    • 在dependencies的conda包列表里,补回需要的pytorch灵活版本约束:
      - pytorch=1.13.0.*
      
    • 找到pip依赖段,把自动生成的- nb-core-news-md==3.3.0整行删除,替换回原来的直链安装配置:
      - https://github.com/explosion/spacy-models/releases/download/nb_core_news_md-3.3.0/nb_core_news_md-3.3.0-py3-none-any.whl
      
  3. (可选)脚本自动化避免重复操作
    如果需要频繁导出环境,不用每次手动改文件,写个简单的shell脚本自动完成全流程即可:
    # 导出环境,排除pytorch
    conda env export --exclude pytorch > environment.yml
    # 在channels配置后插入pytorch的通配版本约束
    # macOS用下面三行
    sed -i '' '/- defaults/a\
      - pytorch=1.13.0.*
    ' environment.yml
    # Linux环境把上面三行替换成下面这行
    # sed -i '/- defaults/a\  - pytorch=1.13.0.*' environment.yml
    
    # 替换错误的pip包条目为原始直链
    # macOS用下面这行
    sed -i '' 's|- nb-core-news-md==3.3.0|- https://github.com/explosion/spacy-models/releases/download/nb_core_news_md-3.3.0/nb_core_news_md-3.3.0-py3-none-any.whl|' environment.yml
    # Linux环境把上面这行替换成下面这行
    # sed -i 's|- nb-core-news-md==3.3.0|- https://github.com/explosion/spacy-models/releases/download/nb_core_news_md-3.3.0/nb_core_news_md-3.3.0-py3-none-any.whl|' environment.yml
    

注意事项

  • 不要用--no-builds参数,这个参数会移除所有conda包的构建号,等于所有依赖都取消版本锁定,不符合需求。
  • 目前Conda没有内置参数可以自动保留pip直链安装的URL,这类非公开源的直链包都需要手动保留或者通过脚本替换,不要直接使用导出时自动生成的对应条目。
  • PyTorch nightly通道本身是滚动更新机制,旧构建会定期清理,永远不要锁定nightly版本的完整构建号,用通配符匹配次版本号是正确的用法。

内容的提问来源于stack exchange,提问作者leifericf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 23:18:33