Python包和模块管理
二、模块
-
模块是什么?模块就是一个
.py
文件,可以定义函数、类和变量,模块内也可能包含可执行的代码。 -
模块的作用
- 代码重用:模块可以将代码划分为更小的单元,方便在其他文件中重复使用。
- 组织和结构化代码:模块帮助将大型代码库分解成逻辑单元,使代码结构更清晰。
- 避免命名冲突:模块引入了命名空间机制,可以有效避免命名冲突。例如,两个模块中的相同变量名不会互相干扰。
- 便于维护:通过模块化,开发者可以专注于一个模块的功能,便于修复错误、扩展功能或进行测试。
- 引入标准库和第三方库:Python提供了丰富的标准库模块,可以直接导入使用。此外,还可以通过
pip
引入第三方模块。
-
模块的使用
- 导入整个模块
import math
- 导入模块中指定的函数
from math import sqrt
- 给模块起别名
import math as m
- 导入整个模块
-
如果某个模块A内部有可执行代码,其它模块导入A时,怎么避免执行这些可执行代码?
-
__name__
:当在本模块中执行时,会被替换成__main__
,如果其他模块使用到了该模块,就变成了该模块名。-
举例子
# my_module.py 代码 def sayHello(name) : print("hello", name) sayHello("ouyang") print(__name__)
# main.py 代码 from my_module import sayHello sayHello("xx")
结果
ouyang@ouyangdeMacBook-Pro python_learn % python3 my_module.py hello ouyang __main__ ouyang@ouyangdeMacBook-Pro python_learn % python3 main.py hello ouyang my_module hello xx # 上述结果可以看见,在my_module中,__name__的结果就是__main__ # 而在main.py中,就是模块名
-
-
所以,当某些模型内部代码,不希望其他模型执行时,可以做如下操作
if __name__ == "__main__": sayHello("ouyang")
-
-
当使用
from 模块 import *
时,可以使用__all__ = ['函数名']
,来限制,只能导入__all__
中的。
三、包
- 包(Package) 是一个组织管理模块的文件夹。包本质上是一个包含多个模块的目录,其中每个模块都是一个
.py
文件。包的作用是提供一种层次化的方式来组织和管理多个相关的模块,以便于在大型项目中有效地管理代码。 - 包的结构
- 目录:包是一个目录,其中包含多个模块或子包。
__init__.py
文件:每个包目录都必须包含__init__.py
文件,来告诉Python解释器该目录是一个包。它的存在允许你在包和包内的模块之间建立导入关系。__init__.py
文件可以是空的,也可以包含初始化代码,在包被导入时自动执行。
- 使用
- 导入包中的模块
import my_package.module1
或者from my_package import module1
- 前者使用时要
my_package.module1.xxx
- 后者只需要
module1.xxx
- 前者使用时要
- 导入包中的某个模块的某个函数
from my_package.module1 import sayBye
- 注意,没有
import my_package.module1.sayBye
这种用法。
- 注意,没有
- 导入包中的模块
- 包的导入机制
- 绝对导入:使用完整的路径导入模块或包
- 相对导入:在包内部使用相对路径导入模块或包。
- 可以在
__init__.py
中,使用__all__
控制允许导入的模块 ,同样,这只能针对from 包 import *
有效
四、第三方库
- 数据处理与分析
- NumPy:用于数值计算的基础库,提供多维数组对象和丰富的数学函数。
- Pandas:用于数据分析和操作,提供数据表格(DataFrame)结构,适合数据清洗和操作。
- Matplotlib:绘图库,用于创建静态、动态和交互式可视化。
- Seaborn:基于Matplotlib的高级可视化库,特别适用于统计数据的可视化。
- SciPy:用于科学和工程计算,扩展了NumPy的功能。
- 机器学习与人工智能
- Scikit-Learn:用于机器学习的工具包,支持分类、回归、聚类等基本算法。
- TensorFlow:深度学习框架,由Google开发,支持神经网络的构建和训练。
- PyTorch:另一个流行的深度学习框架,由Facebook开发,使用灵活且易于调试。
- Keras:基于TensorFlow的高级神经网络库,适合快速构建和实验神经网络。
- XGBoost:用于提升树模型的库,适合构建高效的梯度提升模型,常用于竞赛和实际应用。
- 网络开发
- Django:一个全功能的Web框架,适合快速构建复杂的Web应用。
- Flask:轻量级Web框架,适合快速原型开发和小型应用程序。
- Requests:简化HTTP请求的库,适合与Web API交互。
- Beautiful Soup:用于解析和抓取HTML和XML内容,常用于网络爬虫。
- Scrapy:功能强大的网络爬虫框架,适合构建高效的数据爬取项目。
- 数据可视化
- Plotly:用于交互式图表的库,支持多种图形类型,包括3D和金融图表。
- Bokeh:创建交互式可视化图表,适合大数据量可视化。
- Altair:基于Vega和Vega-Lite的声明性数据可视化库,适合快速制作简单的可视化。
pip
基本使用- 安装包
pip install 包名
:安装指定的包,pip install 包名==版本号
:安装指定的版本pip install -r requirements.txt
:从文件中安装pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package_name
:使用指定源安装
- 卸载包
pip uninstall package_name
- 更新包
pip install --upgrade package_name
- 查看已安装的包
pip list
:列出已安装的包pip list --outdated
:检查包是否有可用的更新
- 安装包