包是在模块之上的概念,为了方便管理而将多个脚本文件(模块文件)进行打包。
包是一种用点式模块名
构造 Python 模块命名空间的方法。例如,模块名 A.B 表示包 A 中名为 B 的子模块。正如模块可以区分不同模块之间的全局变量名称一样,点式模块名可以区分 NumPy 或 Pillow 等不同多模块包之间的模块名称。
包其实就是文件夹,包和文件夹的一大区别在于:包内存放了一个名为__pycache__
的文件夹和__init__.py
文件,该文件的内容就将是包的内容。然后是一些模块文件和子目录,如果子目录中也有__init__.py,那么它就是这个包的子包了。
可以通过类似导入模块的方式导入包。导入包其实就是运行包下的__init__.py
文件。如果包中没有__init__.py
,则在导入包时不会有效果。但是会自动创建一个名为__pycache__
的文件夹。
由于在导入包的时候会自动运行包内的__init__.py文件,所以一般会在该文件中写明导入包时要导入的包内其他py文件的语句。此时就可以用到相对导入了。
不建议在包内的__init__.py文件中写入其它非导入模块语句,尽量保证该文件的简洁性。
在__init__.py文件中,可以定义一个变量:__all__
,一般这个变量等于该包内所有子模块名,这样在通过from 包 import *
时则会查找__all__变量,并将该变量所指向的模块全部导入。
库是具有相关功能模块(包)的集合。这也是Python的一大特色之一,即具有强大的标准库、第三方库以及自定义模块。一些大型的项目要实现比较多的功能,创建了许多的包和模块,那么就可以将所有的包放在一起,形成一个库。
其实库是个抽象的概念,只要某个模块或者一组模块,开发它们的目的就是给其它模块调用的,就可以称之为库。
Python 标准库
Python语言提供了功能丰富的标准库 。这些标准库把开发中常用的功能都做好了。我们可以直接使用它们。
这些标准库里面有一部分叫做内置类型(built-in types)和内置函数(built-in functions)。内置类型和内置函数无须使用import导入,可以直接使用。内置类型有:int、float、str、list、tuple等。
还有些标准库,需要使用import导入,才能使用。常见有 sys, os, time, datetime, json,random 等。
我们要结束Python程序,就可以使用sys库里面的exit函数。
我们要得到字符串形式的当前日期和时间,可以使用datetime库。
我们要获取随机数字,可以使用random库。
练习
1、利用dir、help探索上述标准库
2、使用不同的方式导入上述标准库
同样的,和模块一样,来自网上其它人员编写的模块组合而成的库称之为第三方库,Python强大之处不仅仅是系统自带的标准库,还有来自网上由其它人员编写的大量实用的第三方库,下载安装之后可以极大的提高编程效率,让我们不必为了编写某些特定的功能去重复造轮子
。
要使用第三方库我们需要安装到本地。一般有以下几种方式安装第三方库:
这也是最简单、最常用的一种方式。
1、运行cmd命令打开cmd窗口。
2、在cmd窗口中输入命令:pip install 第三方库名[==版本号]
3、按下回车后会自动到PYPI收集并安装第三方库。安装的路径为Python\Lib\site-packages,这个文件夹就是Python专门用来下载并安装第三方库的。
1、直接到已经安装好第三方库的电脑上,找到第三方库安装的文件路径,将库相关的文件夹(一般为库同名的文件夹以及库名-版本号.dist-info
文件夹)复制
2、粘贴到另一台电脑相应的文件夹中。
2.3.5.3 到PYPI官网上下载安装文件安装注意:这种方法是电脑没有网络无法从网上下载的一种替代方式,不推荐使用。并且要注意两台电脑上安装的Python版本最好要一致。
1、直接打开PYPI并搜索要安装的库名。
2、找到后点击库主页左上方的Download files
。然后在右侧找到适合自己电脑系统的安装文件。注意,这个时候下载的安装文件是.whl
格式的。
3、打开cmd窗口并将工作目录切换到刚才下载的whl安装文件所在的目录中
4、通过命令pip install xx.whl
即可完成安装。
1、打开PyCharm,然后点击文件\设置\项目:项目名\Python解释器
,然后点击+
2、在弹出的对话空中,在上方输入要安装的库名:requests,找到之后点击左下方的安装软件包
后。软件会自动下载并安装。
练习
通过不同的方式分别安装:pandas、requests、pygame、numpy库
1、为了保证运行效率,每次解释器会话只导入一次模块。如果更改了模块内容,必须重启解释器;仅交互测试一个模块时,也可以使用 importlib.reload(),例如:
>>> import importlib
>>> importlib.reload(模块名)
2、可以使用as关键字将最后导入的内容和as后的名称进行绑定。例如:
import math as mt # 用mt代表导入后的math模块名
from math import sqrt as st # 用st代表导入的sqrt函数
模块名、变量、函数、类等都可以通过as和其它内容进行绑定。这么做的好处有几点:
- 在不加入模块名的情况下可以区分同名对象
- 可以简化输入,提高代码编写速度
3、使用 from package import item 时,item 可以是包的子模块(或子包),也可以是包中定义的函数、类或变量等其他名称。import 语句首先测试包中是否定义了 item;如果未在包中定义,则假定 item 是模块,并尝试加载。如果找不到 item,则触发 ImportError 异常。相反,使用 import item.subitem.subsubitem 句法时,除最后一项外,每个 item 都必须是包;最后一项可以是模块或包,但不能是类、函数或变量。