1. 模块
模块实质上就是一个python文件。它是用来组织代码的,一个xx.py 文件,文件名xx就是模块的名称.
2. 包
包,package本质就是一个文件夹,和文件夹不一样的是它有一个__init__.py
文件。包是从逻辑上来组织模块的,也就是说它是用来存放模块的,如果想导入其他目录下的模块,那么这个目录必须是一个包才可以导入。
3. 模块的分类
python 中,模块分为以下几类:
-
标准模块、标准包
python自带,直接import就能用。比如: string, random, datetime, os, sys, json, hashlib 等 -
第三方模块
别人写好的一些模块,需要安装后才能使用 -
自己写的python 文件
4. 第三方模块安装的方法
pypi 站点关于安装模块的说明: https://packaging.python.org/tutorials/installing-packages/
- 包管理器安装
python常用的包管理器是pip 和 easy_install。
它们会从PyPI的源里搜索需要安装的模块,找到后自动下载安装。
PyPI 是Python官方的第三方模块仓库,供所有开发者下载或上传代码。主推使用pip,实在没法使用pip,再考虑easy_install,如果easy_install都不好使,那就源码安装
一般的安装方法: pip install xxx
可以指定安装源,pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas
可以设置默认的安装源:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
国内较好的镜像源
豆瓣:https://pypi.douban.com/simple/
阿里云:https://mirrors.aliyun.com/pypi/simple/
中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
pip 升级的操作
- pyhton 2.7 下的操作方法
python -m pip install --upgrade pip
- python 3.+ 下的操作方法
python3 -m pip install --upgrade pip
- 获得root 权限下
pip install --upgrade pip
- 离线安装
离线安装时,可以安装.tar.gz 文件或 .whl 文件
.tar.gz 文件的安装
.tar.gz 文件安装,采用源码安装的方式。一般步骤如下:
a、解压这个压缩包
b、进入到这个解压之后的文件夹里面(shift+右键,在此处打开命令行窗口(或者在地址栏中直接输入cmd))
c、在命令行里面运行 python setup.py install
也可以使用 pip 进行安装
pip install xxx.tar.gz
.whl 文件的安装
wheel文件格式本质上是一个zip包格式,它使用.whl作为扩展名。安装.whl 文件的一般步骤如下:
# 示例: windows 下
pip install D:packagepandas-0.24.2-cp36-cp36m-win32.whl
5. 模块导入
5.1 python 导入模块的顺序
-
从当前目录下查找需要导入的python文件
-
从python 的环境变量中(sys.path)查找
import sys
print sys.path
# 结果示例
['', 'C:\Windows\system32\python27.zip', 'D:\Program Files\python2717\DLLs', 'D:\Program Files\python2717\lib', 'D:\Program Files\python2717\lib\plat-win', 'D:\Program Files\python2717\lib\lib-tk', 'D:\Program Files\python2717', 'D:\Program Files\python2717\lib\site-packages']
路径列表的第一个元素为空字符串,代表的是相对路径下的当前目录.
由于在导入模块的时候,解释器会按照列表的顺序搜索,直到找到第一个模块,所以优先导入的模块为同一目录下的模块.
导入模块时搜索路径的顺序也可以改变.这里分两种情况:
a. 通过sys.path.append(),sys.path.insert()等方法来改变,这种方法当重新启动解释器的时候,原来的设置会失效
import sys
sys.path.append('/home/test/')
# 当把demoa.py 文件放到 sys.path 中的某个环境变量下时,使用 demoa. 就可以看到该模块下的函数、变量等。
b. 改变PYTHONPATH,这种设置方法永久有效
export PYTHONPATH=$PYTHONPATH:/home/test
5.2 导入模块的实质
把对应的python 文件从头到尾执行一次
5.3 模块导入的方法
-
import module_name
-
from module_name import xx[,...]
-
import module_name as xx
5.4 判断系统中是否安装了某个模块
-
命令行下, import module_name, 若没有报错,说明已安装了模块 module_name
-
函数中判断, 使用
importlib
模块或 内置的__import__()
函数判断.
importlib 和 _import_() 都可以通过过字符串来导入另外一个模块。用法如下:
import importlib
mName = "lib.test"
module = importlib.import_module(mName)
module.getName()
mName = "demo"
module = __import__(mName)
module.getName()
5.5 相对路径与绝对路径导入说明
绝对路径就是文件的真正存在的路径,是指从硬盘的根目录(盘符)开始,进行一级级目录指向文件。
相对路径就是以当前文件为基准进行一级级目录指向被引用的资源文件。
以下是常用的表示当前目录和当前目录的父级目录的标识符:
../ 表示当前文件所在的目录的上一级目录
./ 表示当前文件所在的目录(可以省略)
/ 表示当前站点的根目录(域名映射的硬盘目录)
对于模块和自己写的程序不在同一个目录下导入的情况,可以把模块的路径通过 sys.path.append(路径)
添加到程序中,再进行导入。示例如下:
如果是绝对导入,一个模块只能导入自身的子模块或和它的顶层模块同级别的模块及其子模块
如果是相对导入,一个模块必须有包结构且只能导入它的顶层模块内部的模块
重要! 下图说明了如何在一个模块中导入与当前模块不在同一层目录下的基本操作,主要还是 根据 模块导入 时的搜索路径来处理。