如何在conda的environment.yml中实现带--no-deps的pip安装?
解决environment.yml中安装Vissl时跳过依赖的问题
问题原因
你之前的写法报错是因为--no-deps是pip的命令行参数,不属于pip的需求语法范畴,直接把它放在pip依赖条目里会被当成无效的依赖项解析,从而触发错误。
可行解决方案
方案1:使用run命令单独执行带参数的pip安装
在environment.yml中添加run节点,让环境在所有基础依赖安装完成后,单独执行Vissl的安装命令。这种方式既能指定--no-deps跳过它的依赖检查,又不会影响其他pip项的正常依赖安装:
name: your-env-name channels: - defaults dependencies: # 你的conda依赖项(示例) - python=3.9 - pip - pip: # 你的其他pip依赖项,正常保留,它们会按默认逻辑安装依赖 - numpy>=1.21 - pandas>=1.3 # 环境创建完成后执行Vissl的安装命令 - pip install -e git+https://github.com/facebookresearch/vissl.git --no-deps
该方案的优势:
- 完全隔离Vissl的安装参数,不干扰其他pip依赖的依赖解析流程
- 确保Vissl安装时,环境中已有的目标依赖已经准备完毕
方案2:临时修改Vissl的setup.py(可选)
如果不想用run命令,可以克隆Vissl仓库后临时修改其依赖声明,再通过environment.yml指向本地编辑版:
- 克隆仓库:
git clone https://github.com/facebookresearch/vissl.git - 编辑仓库内的
setup.py,删除或注释掉install_requires下的所有依赖项 - 在environment.yml的pip部分添加本地路径的可编辑安装:
- pip: - -e /path/to/your/local/vissl
该方案适合需要频繁修改Vissl代码的场景,但需要维护本地仓库副本,灵活性不如方案1。
内容的提问来源于stack exchange,提问作者Wouter Zwerink
相关产品推荐
相关产品推荐

