8.15 python模块管理
1 python模块介绍
1.1 函数和模块
**函数:**在python中可以将某些具备一定功能的代码写成一个函数,函数可以在一定程度上减少代码的冗余,节约书写代码的时间。python中内置了大量函数,例如print,import等都是函数。也可以自定义函数。
**模块:**多个函数在一个文件中就是一个模块。模块英文为Modules,本质上是一个Python程序,以.py作为文件后缀。任何py文件都可以作为一个模块。可以通过import函数进行导入。通过模块,可以有效弥漫命名空间的冲突,将一个较大的程序分为多个文件,提升代码的可维护性。
1.2 包和库
**包:**简单来说,包就是多个模块的集合。当项目较大,模块较多时,我们就可以把模块放在包中,便于管理。
**模块:**模块是容纳代码的文件,一个模块定义了一组 Python 函数和其他对象,通常这些函数和对象都是关联的。模块的名称由文件名称而来。
如果理解了模块,包就容易理解了,因为包就是包含代码和子目录的目录。包里包含了一些通常相互关联的代码文件(模块)。包的名称由主目录名而来。
包是模块概念的自然扩展,旨在应付非常大型的项目。模块把相互关联的函数、类和变量进行了分组,同理,包则是把相互关联的模块进行了分组。
**库:**Python中的库是借用其他编程语言的概念,没有特别具体的定义,Python库着重强调其功能性。在Python中,具有某些功能的模块和包都可以被称作库。模块有诸多函数组成,包由诸多模块机构化组成,库中也可以包含包、模块和函数。
一句话总计:
函数是一段代码;
模块是一个文件;
包是一个文件夹;
2 利用pip安装模块
# 直接使用pip安装
pip search pyfastx
pip install pyfastx
pip uninstall pyfastx
# 添加--user
python -m pip install --user requests
3 利用conda管理模块
| 选项 | 说明 |
|---|---|
| info | 显示某个软件信息 |
| help | 给出帮助信息 |
| list | 查看所有安装的软件 |
| search | 查找安装的软件 |
| create | 创建一个新的conda环境 |
| install | 安装需要的软件 |
| update | 对软件进行升级 |
| upgrade | 与update相同 |
| remove | 卸载已经安装的软件 |
| uninstall | 与remove相同 |
| config | 配置软件源 |
| clean | 移除没用的软件安装包和缓冲 |
| package | 低配版软件工具,还在实验中 |
#案例:安装plotly包
#搜索软件
conda search plotly
#安装软件
conda install -y plotly
#查看已安装软件
conda list
#升级软件
conda update plotly
#移除软件
conda remove plotly
4 虚拟环境
Anaconda可以非常方便的管理很多软件,但是由于模块的数量和版本非常多。不同模块之间还是会存在兼容性问题。比如有些模块只能在固定python版本中运行。这个时候就可以使用Anaconda创建的虚拟环境。其实python也自带venv功能,但是Anaconda的虚拟环境更好管理。 conda的虚拟环境可以通过conda env进行管理,除了创建,还可以进行升级,导出以及删除环境等。
create :创建虚拟环境
export :导出虚拟环境
list :列出虚拟环境
remove :移除虚拟环境
update :升级虚拟环境
config :配置虚拟环境
现在安装的Anaconda为python3的环境,下面我们创建一个虚拟环境,分别安装pyfastx和biopython环境。
#创建bipython环境
conda create -n biopython -y
#激活环境
conda activate biopython
#安装biopython
conda install -y biopython
#打开python
python
#导入模块,查看版本
>>> import Bio
>>> print(Bio.__version__)
>>>
5 模块路径
如果模块或者包不在python默认路径中,就会提示找不到的错误。 首先要了解python模块的默认路径;
import sys
sys.path
['', 'C:\\Users\\genom\\anaconda3\\python310.zip', 'C:\\Users\\genom\\anaconda3\\DLLs', 'C:\\Users\\genom\\anaconda3\\lib', 'C:\\Users\\genom\\anaconda3', 'C:\\Users\\genom\\anaconda3\\lib\\site-packages', 'C:\\Users\\genom\\anaconda3\\lib\\site-packages\\win32', 'C:\\Users\\genom\\anaconda3\\lib\\site-packages\\win32\\lib', 'C:\\Users\\genom\\anaconda3\\lib\\site-packages\\Pythonwin']
这是python查找模块的默认搜索路径,搜索的结果因为安装,版本和操作系统的原因都不会相同,每个人的结果可能都不会相同。 因此,当我们import一些模块出现问题的时候,我们可以查看这个模块文件是不是在搜索路径中。当我们想要把自己写的文件作为一个模块的时候,但是又不在搜索路径中,我们可以自己添加进去,比如:
sys.path.append(r'C:\Users\genome\Desktop')
sys.path
['', 'C:\\Users\\genom\\anaconda3\\python310.zip', 'C:\\Users\\genom\\anaconda3\\DLLs', 'C:\\Users\\genom\\anaconda3\\lib', 'C:\\Users\\genom\\anaconda3', 'C:\\Users\\genom\\anaconda3\\lib\\site-packages', 'C:\\Users\\genom\\anaconda3\\lib\\site-packages\\win32', 'C:\\Users\\genom\\anaconda3\\lib\\site-packages\\win32\\lib', 'C:\\Users\\genom\\anaconda3\\lib\\site-packages\\Pythonwin', 'C:\\Users\\genome\\Desktop']
因为sys.path返回的是路径的列表,我们直接使用append()方法把想要引用的模块路径添加进去即可。
6 加载python模块
python加载模块主要使用import语句,import语句有三种格式,最基本的就是:
# 导入numpy模块
import numpy
然后就可以使用numpy里面的函数了,不过需要通过加点号的方式来调用包里面的函数。
In [18]: numpy.
abs add_newdoc()
absolute add_newdoc_ufunc()
add all() >
add_docstring() allclose()
第二种方式可以通过from .. import 的方法,将包里面函数全部导入进来。
#导入全部函数
from numpy import *
该方法会导入全部函数,使用函数不需要加包的名字和点号。但由于python模块众多,函数名有重叠冲突,代码可读性差,不推荐这种方法。
如果只使用包里面几个函数,也可以采用下面的语法。
#从numpy包里面导入zeros, ones, unique三个函数
from numpy import zeros, ones, unique
第三种方式是前面两种方式的合并,即能保留清晰的语法,使用起来也比较简洁。
#给复杂的包设置一个简单别名
import numpy as np
#调用包中函数
np.arange(10)
一些常用的包都有约定俗称的别名,尽量不要更改。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns