Python中的模块
模块是Python中组织代码的基本方式
Python的脚本都是用扩展名为py的文本文件保存的,一个脚本可以单独运行,也可以导入另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module)
.pyc和.pyo文件也可以当作模块,当调用模块时,如果该模块文件是.py,会自动在该模块所在目录生成一个.pyc编译文件,加快以后的调用执行的速度
dir(模块名):可以获取模块的所有包含的类、方法或属性
"__all__"(并非所有模块都有这个属性)表示模块编写者想要外部直接使用的类、方法或属性
使用from 模块名 import *的方式导入只能导入该属性指定的对象,该属性没有指定的对象不会被导入
"__file__"表示该模块的代码文件所在的位置属性
"__cached__"表示该模块的编译文件所在的位置
Python中的模块可以按照目录组织为包(package),创建一个包的步骤是:
1、建立一个名字为包名字的文件夹
2、在该文件夹中创建一个__init__.py文件(存放包的信息,可以为空)
3、根据需要在该文件夹下存放脚本文件
4、导入模块时使用包名.模块名的方法,使用模块中的函数时包名.模块名.函数名()
模块的导入:
1、import 模块名 / import 模块名 as 变量名(将导入的模块对象赋值给一个变量,可以理解成模块别名)
在后面调用模块中的函数时使用模块名.函数名()或者模块别名.函数名()的方式调用
模块名与脚本的文件名相同(不包含.py),可以在模块内部使用全局变量,而无需担心它将来与某个用户的全局变量在导入模块时意外冲突
出于性能考虑,每个模块在每个解释器会话中只导入一遍。因此,如果修改了模块,需要重启解释器
可以用importlib模块中的函数reload(module)重新加载模块,python3中取消了reload()内置函数,整合到了importlib模块中
reload会重新加载已加载的模块,但原来已经使用的实例还是会使用旧的模块,而新生产的实例会使用新的模块,reload后还是用原来的内存地址
reload不支持 from ××× import ××× 格式的模块进行重新加载
2、from 模块名(包名) import 函数1(模块1)[,函数2(模块2),...] :从包导入模块或从模块导入某个或某些对象
如导入某个模块的某个函数,直接调用函数名()即可,不需要模块名.函数()这种方式
如导入某个包的某个模块,直接模块名.函数名()调用即可,前面不需包名.模块名.函数()的方式调用
可以导入一个模块或包中的所有对象或模块:from 模块名(包名) import *
3、__import__(name, globals=None, locals=None, fromlist=[], level=0):动态导入指定模块
name:str,模块名称字符串
globals:全局变量集合,默认None,一般不用设置。如果设置的话,常用globals()
locals - 局部变量集合,默认为None,一般不用设置。如果设置的话,常用locals()
fromlist:是否导入子模块,值为一个列表
看上去是导入模块的列表,但实际上目前只是一个判断条件,只要设置为非空值,将导入子模块
如sys.path:当不设置时,返回sys,如果设置为非空值,则返回ntpath(path模块)
level - 绝对或者相对导入函数返回导入的模块,需要赋值给变量才能使用,如req = __import__('requests'),后续使用req.get()、req.post()等
PS:如果模块脚本中本身有输出或者某些操作,我们调用的时候使用Python内置属性__name__来判断当前的是否是脚本本身的运行(此时__name__的值为__main__)或者是在被作为模块调用时的运行(此时__name__的值为作为本调用的模块名,也就是文件名。
调用模块时的搜索路径:
总的来说会按照sys模块的sys.path属性中给出的目录逐个查找,sys.path给出的目录可以按照查找顺序分为5个部分:
1、程序的根目录:这个根目录依赖于你怎么运行代码,当运行一个程序时是程序运行入口文件所在目录;当用交互式窗口运行代码时就是你所在的工作目录。
2、PYTHONPATH环境变量设置的目录,因为这个搜索在标准库之前,所以要小心不要覆盖一些标准库的同名模块。
3、标准库的目录
4、.pth文件列出的目录,它允许用户以每行一个的方式列出搜索路径
它和PYTHONPATH环境变量的不同是会在标准库路径之后搜索;
它是针对整个python安装的,而不是针对用户的(环境变量会随着用户的不同而不同)
通过site.getsitepackages()(要先导入site模块)找到.pth文件可以放置的位置
5、第三方扩展的site-package目录,Lib/site-package目录,这一般是第三方扩展安装的地方
在线安装python模块
pip是Python包管理工具,提供了对Python包的查找、下载、安装、卸载的功能。Python3.4以上版本都自带pip
pip官网:https://pypi.org/project/pip/
显示版本和路径:pip --version
获取帮助:pip --help
升级pip:pip install -U pip
安装包:
pip install SomePackage # 最新版本
pip install SomePackage==1.0.4 # 指定版本
pip install 'SomePackage>=1.0.4' # 最小版本
升级指定的包,通过使用==, >=, <=, >, < 来指定一个版本号
pip install --proxy [user:passwd@]http_server_ip:port pkg #通过指定的代理下载安装
pip install --user pkg #添加--user选项,会仅对当前用户安装,安装目录 ~/.local/lib/python3.x/site-packages
升级包:
pip install --upgrade SomePackage
pip install --upgrade --upgrade-strategy only-if-need|eager pkg
#指定升级策略
only-if-need(默认值):只有当旧版本不能适配新的父依赖包时,才会升级
eager :升级全部依赖包
强制更新pip:python -m pip install --upgrade --force-reinstall pip
卸载包:pip uninstall SomePackage
搜索包:pip search SomePackage
显示安装包信息:pip show
查看包的详细信息:pip show -f SomePackage
列出已安装的包:pip list
查看可升级的包:pip list -o
pip更换源
pip默认的安装源已经被墙了,安装经常失败,所以我们换成国内的一些优质的安装源
常用的国内比较靠谱的源:
阿里云:https://mirrors.aliyun.com/pypi/simple
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
中国科学技术大学:https://mirrors.ustc.edu.cn/pypi/simple
华中科技大学:https://mirrors.hust.edu.cn/pypi/web/simple
临时更换源:使用-i参数指定源
pip install package_name -i https://pypi.tuna.tsinghua.edu.cn/simple
永久修改方法:使用配置文件
Linux/Unix系统中的文件路径
/etc/pip.conf
~/.pip/pip.conf
~/.config/pip/pip.conf
Mac系统中的文件路径
~/Library/Application Support/pip/pip.conf
~/.pip/pip.conf
/Library/Application Support/pip/pip.conf
Windows系统中的文件路径
%HOMEPATH%\\pip\\pip.ini
%APPDATA%\\pip\\pip.ini
C:\\ProgramData\\PyPA\\pip\\pip.ini
使用命令行添加配置文件:
设置单个镜像源 pip config set global.index-url <url> 设置多个镜像源实现平衡负载 pip config set global.extra-index-url "<url1> <url2> ..." 可以直接使用多镜像设置,也可以在设置了index-url以后设置 多个网址之间使用空格隔开,由于存在空格,所有所有网址使用双引号包含 使用命令行时在windows中默认是修改或创建%APPDATA%\\pip\\pip.ini文件
也可以直接手动创建,目录或文件不存在就创建一个
编辑配置文件内容:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
extra-index-url = https://mirrors.aliyun.com/pypi/simple https://mirrors.ustc.edu.cn/pypi/simple
timeout = 6000
proxy = [user:passwd@]proxy.server:port
[install]
# 信任阿里云的镜像源,否则会有警告
trusted-host=mirrors.aliyun.com