在 WSL 中使用 yml 文件创建 conda 环境时报错,如何解决?
使用 conda env create -f 读取这份 YAML,将路径开头补为 /mnt/c/...,并修正 YAML 中 pip: 下的缩进。文件可以继续放在 Windows 文件系统中;如果希望在 WSL 中管理项目,也可以放进用户主目录下的项目文件夹。
Conda 更新后版本不变,需要单独排查。日志只说明这次更新没有产生安装变更,无法据此判断新版本已经安装,或认定这是某个版本的已知缺陷。
创建命令和路径有什么问题?
带有 name:、dependencies: 等字段的环境 YAML,可以用以下命令创建环境:
conda env create -f "/mnt/c/Users/username/OneDrive - myUniversity/Desktop/proteomics_skani.yml"
conda env create 会读取文件中的环境名称:
name: proteomics_skani
因此,通常不需要再提供 -n proteomics_skani。也可以显式指定名称:
conda env create -n proteomics_skani -f "/mnt/c/Users/username/OneDrive - myUniversity/Desktop/proteomics_skani.yml"
原命令中的路径还缺少开头的 /:
mnt/c/Users/username/...
这是相对路径。Windows C 盘在 WSL 中通常挂载为 /mnt/c,所以这里应以 /mnt/c/Users/username/... 开头。路径中包含空格,需要保留双引号。
conda create --file 传统上常用于读取包规格列表,较新版本也可能支持环境文件识别,具体行为取决于版本。当前报错说明,这次调用在参数检查时没有取得环境名称。改用专门处理环境文件的 conda env create,可以避开这种用法差异。
先修正 YAML 中的 pip 配置
原文件中的后两个包没有缩进到 pip: 下面:
- pip:
- plotly==5.24.1
- pytest==8.2.2
这样写会使 pip: 的值为空,plotly 和 pytest 则成为 Conda 依赖列表中的独立项,无法表示这两个包需要通过 pip 安装。
可以将文件整理为:
name: proteomics_skani
channels:
- conda-forge
- bioconda
- nodefaults
dependencies:
- python=3.10
- pandas
- numpy
- requests
- scipy
- spyder
- skani
- networkx=3.1
- pip=22.3.1
- pip:
- plotly==5.24.1
- pytest==8.2.2
这里保留了原来的版本约束,去掉了重复的 pip 条目,并显式设置渠道。nodefaults 表示本次创建环境时不再自动加入默认渠道,减少与 defaults 混用的情况。
修正结构后,所有固定版本仍可能无法同时满足依赖。如果后续求解失败,需要根据具体冲突调整。项目若不要求 pip=22.3.1,可以将它改为 pip。
保存文件后,在 WSL 终端中执行创建命令,再激活环境并检查:
conda activate proteomics_skani
python --version
command -v python
command -v skani
skani --help
python 和 skani 的路径应指向该 Conda 环境。日志中的 Platform: linux-64 表明,这次示例中的求解面向 Linux 平台。
YAML 文件应该放在哪里?
YAML 文件用于定义环境,Conda 可以直接从 /mnt/c/... 读取。文件放在哪里,不会决定环境安装在哪里。按环境名称创建时,安装位置由 Conda 的环境目录配置决定。
如果主要在 WSL 中开发,建议把项目放在 Linux 用户主目录下,例如:
/home/username/projects/proteomics_skani/
可以在 WSL 中执行:
mkdir -p ~/projects/proteomics_skani
cp "/mnt/c/Users/username/OneDrive - myUniversity/Desktop/proteomics_skani.yml" \
~/projects/proteomics_skani/
cd ~/projects/proteomics_skani
conda env create -f proteomics_skani.yml
对应的 Windows 文件资源管理器路径是:
\\wsl.localhost\Ubuntu-24.04\home\username\projects\proteomics_skani
\\wsl.localhost\Ubuntu-24.04 对应 Linux 的根目录 /。普通项目适合放在 /home/username 下,也便于管理文件权限。
主要使用 Linux 工具、频繁读写文件的项目,通常更适合放在 WSL 的 Linux 文件系统中。如果只有一个小型 YAML 文件,存放位置对创建操作的影响很小。
如何在 Spyder 中调用 Skani?
在同一个 WSL 终端中激活环境并启动 Spyder:
conda activate proteomics_skani
spyder
Spyder 是图形程序,在 WSL 中显示窗口需要可用的图形支持,例如受支持且已启用的 WSLg。如果出现显示或 Qt 相关错误,需要单独排查图形环境。
在 Spyder 的 Python 控制台中检查解释器:
import sys
import shutil
print(sys.executable)
print(shutil.which("skani"))
sys.executable 应属于 WSL 中的 proteomics_skani 环境,shutil.which("skani") 应返回该环境里的 Linux 可执行文件路径。随后可以测试:
import subprocess
subprocess.run(["skani", "--help"], check=True)
传入参数列表即可,无需使用 shell=True。实际分析时,将 --help 换成所需的 Skani 子命令和参数,并使用 WSL 能访问的文件路径。
如果启动的是 Windows 中的 Spyder,默认解释器和程序搜索路径可能与 WSL 不同。需要确认启动位置和解释器,仅凭环境名称无法判断是否使用了正确的环境。
为什么提示有新版本,却又说已经安装?
这两条消息的含义不同:
A newer version of conda exists表示版本检查发现了更高版本。All requested packages already installed表示更新求解没有产生需要执行的包变更。
后一条并不表示提示中的 26.3.2 已经安装。日志最后的 conda -V 仍显示 26.1.1,说明当前调用的 Conda 版本没有变化。
更新结果可能受到 base 环境的依赖约束、版本固定配置、渠道及优先级、索引缓存等因素影响。这段输出还不足以确定具体原因。
可以先检查当前安装和配置:
type -a conda
conda info --base
conda list -n base conda
conda config --show-sources
conda config --show channels channel_priority pinned_packages
还应检查 base 环境下是否存在 conda-meta/pinned 文件,其中的约束不一定会显示在 pinned_packages 配置项中。
接着查询指定渠道是否提供日志中提示的版本:
conda search --override-channels -c defaults "conda=26.3.2"
这里的 26.3.2 是日志中提示的目标版本,不代表它始终是最新版本。如果查到了适用于当前平台的包,可以先试算:
conda install -n base --override-channels -c defaults "conda=26.3.2" --dry-run
明确指定版本后,如果依赖无法满足,通常会得到更具体的冲突信息。如果生成了安装计划,应先检查是否有意外降级或大量包变更,再决定是否去掉 --dry-run 执行。
如果怀疑本地索引缓存过期,可以清理索引后重新查询:
conda clean --index-cache
这一步不会删除已有环境,也无法保证解决依赖约束导致的更新停滞。可以先按前面的命令创建 proteomics_skani 环境,无须等待 Conda 升级成功。
备注:内容仅供参考。
