通常情况下,我们拿到了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))
})