最近要学习Python处理单细胞,跟着scanpy
的tutorial跑流程,发现这句代码一直报错:sc.tl.leiden(adata, flavor="igraph", n_iterations=2)
,网上搜了一下发现是在Windows中的一个小bug,详情见:sc.tl.leiden with flavor='igraph'
raises an (ignored by igraph) “ValueError: high is out of bounds for int32” · Issue #3028 · scverse/scanpy。
所以我安装了wsl,试试在wsl中能不能跑通,简单记录下wsl+python+conda+jupyterlab的安装。
安装wsl
修改apt镜像
修改pip镜像
安装conda
安装jupyterlab
unset
unset安装wslunsetunset
开启功能
我的系统版本是Windows 11专业版 23H2:
按下win+r,输入control
打开控制面板,打开程序和功能
:
点击启用或关闭Windows功能
把以下3项勾上,然后重启电脑:
安装内核更新包
power shell 以管理员方式运行(如果不升级可能会遇到报错,这个命令需要科学上网):
wsl --update
将 WSL 默认版本设置为 WSL 2:
wsl --set-default-version 2
安装Ubuntu
打开Microsoft Store,安装Ubuntu即可,我选的22.04
安装完成后就可以在开始菜单看到了,点击即可运行,第一次需要创建账号和密码,要牢记!
win11现在默认的终端非常美观,直接用即可,各种设置都是可以直接点点点修改的,比如界面、字体、图标、配色等:
unsetunset修改apt镜像unsetunset
- 查看默认apt源:
cat /etc/apt/sources.list
- 先备份源文件:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
- 编辑源文件:
sudo vim /etc/apt/sources.list
-
进入vim编辑器,在普通模式下(输入上面的代码后默认就是普通模式),使用
dd
(dd
是vim中的命令,表示删除整行内容),删除所有内容,然后去搜索apt清华源(或者阿里源:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区),复制并粘贴(直接鼠标右键)到vim,然后输入:wq
。然后输入sudo apt update
(会输出很多信息),然后输入sudo apt upgrade
(会输出更多信息)
ubuntu22.04默认已经安装Python3.10,输入python3 --version
可查看版本;但是没有安装pip
,可以使用sudo apt install python3-pip
安装
unsetunset修改pip镜像unsetunset
接下来修改pip
的镜像:
# 清华
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 或者阿里
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
查看设置的结果:
pip config list
unsetunset安装condaunsetunset
安装conda,方便管理软件
首先到清华conda镜像(Index of /anaconda/miniconda/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror)下载miniconda linux版安装包,当然也可以直接wget官网的包,但是很慢;
# 这个
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py310_24.11.1-0-Linux-x86_64.sh
# 或者这个,我选择最新的
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
然后用mv命令把安装包移动到/home/liyue/
的某一个文件夹下,最好自己建一个新文件夹,用来放各种安装包,方便管理;
运行安装命令:bash Miniconda3-latest-Linux-x86_64.sh
,安装过程中注意同意
或者回车
(卖萌哥的教程:conda的安装与使用 2.0版(2022-08-12更新) - 简书)
安装完成后,会告诉你如果不想每次启动Linux时默认启动conda的base环境,可以使用命令conda config --set auto_activate_base false
更改conda镜像为清华源(anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror)或者其他源(Anaconda 软件仓库镜像使用帮助 - MirrorZ Help):
# 我选的上科大的镜像
conda config --add channels https://mirrors.shanghaitech.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.shanghaitech.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.shanghaitech.edu.cn/anaconda/pkgs/msys2
conda config --set custom_channels.conda-forge https://mirrors.shanghaitech.edu.cn/anaconda/cloud/
conda config --set custom_channels.bioconda https://mirrors.shanghaitech.edu.cn/anaconda/cloud/
# 显示安装的频道
conda config --set show_channel_urls yes
# 查看已经添加的频道
conda config --get channels
unsetunset安装jupyterlabunsetunset
直接使用pip
安装即可:
pip install jupyterlab
安装完成后,输入jupyter lab
,发现运行不了,然后我关闭wsl
,再重新打开,发现就可以顺利运行了。。。
我使用conda创建了一个叫sc
的小环境,然后安装了scanpy
这个包,激活这个小环境后,再运行jupyter lab
,发现在jupyter中import scanpy as sc
总是报错找不到这个包,搜索后发现是因为内核不在同一个位置导致的。
pip
安装的这个内核在:
import sys
print(sys.path)
['/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '', '/home/ayue/.local/lib/python3.10/site-packages', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages']
但是sc
这个小环境的包位于conda的目录下,所以导致import
失败:
于是根据这篇教程(Jupyter Lab 使用 conda 虚拟环境_jupyterlab 怎么读出conda虚拟环境-CSDN博客)修改,给已经创建好的sc
这个小环境添加ipykernel
:
# 给小环境sc添加ipykernel
conda install -n sc ipykernel
# 激活小环境
conda activate sc
# 将小环境写入jupyter lab的kernel中
python -m ipykernel install --user --name sc --display-name "sc"
这样就可以切换内核了:
切换内核后,再import
就不会报错了,就可以顺利使用这个小环境的包了。