Python初体验之你需要加快你的模块安装速度

我们前些天的推文:简单绘制一个3D效果的饼图吧,对比了R语言和Python的可视化效果,成功的吸引了不少小伙伴入坑Python编程语言,而且它确实是在单细胞数据处理领域占比有超越R的趋势,所以有必要开辟一个Python专辑啦。然后呢,开始学习一个编程语言,我们肯定是首先得安装好它,比如前面我们讲解了Python的安装,它多个版本的差异以及管理,详见:Python初体验之弄清楚版本差异和如何安装管理

通常情况下,我们拿到了Python代码后在运行它的过程中大概率上需要加载很多Python模块,但是对初学者的电脑来说,是接近于空白的,需要一个个模块自己安装。如果我们类比R语言来说,安装R包的代码是非常简洁,如下所示的规律代码安装任意包:

# https://bioconductor.org/packages/release/bioc/html/GEOquery.html
if (!requireNamespace("BiocManager", quietly = TRUE))
 install.packages("BiocManager")
BiocManager::install("KEGG.db",ask = F,update = F)
BiocManager::install(c("GSEABase","GSVA","clusterProfiler" ),ask = F,update = F)
BiocManager::install(c("GEOquery","limma","impute" ),ask = F,update = F)
BiocManager::install(c("org.Hs.eg.db","hgu133plus2.db" ),ask = F,update = F)

实际上,大家即使是没有学习过R包安装,也可以看得懂上面的代码的规律,只需要变化上面的代码里面的R包名字,就可以一行行运行代码来安装指定的包了!

当然了,说这样的简单其实仅仅是因为 “难者不会,会者不难”。一个擅长R语言的小伙伴去使用Python,如果也想如此快捷的批量安装Python的模块,就会很麻烦了。如果没有对应的Python的模块,那么第一个经典的报错如下所示:

经典的报错

这就是Python的初学者一定会遇到的这样的报错,说缺某个模块啦 :

 import pandas as pd
ModuleNotFoundError: No module named 'pandas'

前面我们介绍了由JetBrains公司开发的专业Python IDE(PyCharm) 来辅助我们安装Python模块啦 , 大家可以提前熟悉这个IDE的一些按键,:

这个IDE的一些按键

可以通过这个IDE来打开终端, 每个人的电脑也有很多其它开启终端的方法。在这个终端可以使用pip的install命令来安装任意成熟的Python模块,如下所示:

使用pip的install命令来

很明显的可以看到,它的网络速度非常慢。。。

因为我们绝大部分人都是在中国大陆地区,所以也是需要通过设置合理的镜像来加快你的模块安装速度!

 pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple

基本上就是无敌的速度了:

无敌的速度

同样的,我们可以一次性安装多个Python的常见的模块,如下所示的代码:

 pip install seaborn matplotlib numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

也可以把多个Python的模块和对应的版本写到requirements.txt文件里,用pip -r requirements.txt安装 ,这样的话整理不同的Python的模块和对应的版本需要花费时间但是它们就不容易出现版本冲突,一劳永逸。

如果对比R语言,其实它的批量安装R包还麻烦一点,这个技巧我在移植一些shiny应用程序就用到过:

list.of.packages <- c("shiny",
 "tidyr",
 'tidyverse', 
 "clusterProfiler",
 "DT",
 "ashr",
 "enrichplot",
 "plotly")
# 这个 list.of.packages 变量,可以是读取一个含有无数个包的名字的文本文件。
all_packages = rownames(installed.packages())
save(all_packages,file = 'all_packages.Rdata')

#checking missing packages from list
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
new.packages 
packToInst <- setdiff(list.of.packages, installed.packages())
packToInst
if(T){
 lapply(packToInst, function(x){
 BiocManager::install(x,ask = F,update = F)
 })
}
lapply(intersect(packagesReq, installed.packages()),function(x){
 suppressPackageStartupMessages(library(x,character.only = T))
})

Python图文复现2022

scanpy官方教程2022

 

Comments are closed.