【Python 基础教程】合理的使用模块与包

简介: 【Python 基础教程】合理的使用模块与包

👾前言👾


Python语言语法灰常的简单,大家也许被他的语法和成千上万个优秀的第三方库迷惑的不要不要的,Python的包管理工具没有像Java的Maven那样成熟,直接导入即可。如果不知道Python的一些包管理底层原理可能会在项目配置项目搭建上因为包的导入导出而费尽心思。今天就对Python底层的包管理进行一下剖析。然后讲一下导包常遇见的问题以及如何对项目进行打包。


🍁前置知识(目标)🍁


  • 理解包与模块的概念与区别
  • 理解运行时导包的顺序,Python解释器如何解析包
  • 掌握查看包、模块相关信息的函数


🤺为什么需要将程序模块化?🤺


💫开发的便利性而言


在日常进行程序开发的时候,如果项目很大不对程序进行模块化处理就会导致如果前一部分工作没有进展,则后续的工作更加无法进展。即使有再多的技术人员也无尽于事。如果将程序模块化后,分工给具体的人。则可以同时进行开发,最后对程序进行简单的组合即可。时间上互不影响。效率大大提升。



💫软件后期升级与维护而言


软件工程中一直流行一种思想“高内聚,低耦合”。使用这样的思想开发出的软件更加有利于后期的维护。高内聚就是各个模块内部应该紧密联系,减少不必要的代码。低耦合指的就是模块化,每个模块干啥事应该事先规定好。并且模块间依赖关系不要那么强。这样可以把程序的功能像插销与插座一样进行插拔。从而有利于后期的维护与更新。


🤺Python包管理工具pip🤺


💫简介


Python有成千上万的宝藏库,这些库相当于是已经集成好的工具,只要安装就能在Python里使用。 它们可以处理各式各样的问题,无需你再造轮子,而且随着社区的不断更新维护,有些库越来越强大,几乎能媲美企业级应用。 怎么下载安装呢?它们被放在一个统一的“仓库”里,名叫PyPi(Python Package Index),所有的库安装都是从这里调度。 有了仓库之后,还需要有管理员,pip就是这样一个角色。使用pip进行库的安装的时候默认是去外网下载的。所以大家有些库可能会安装不成功。有两种解决方式:一、科学上网 二、替换镜像源。


pip会默认将install的包安装到当前用户的工作目录下。解释器在进行导包搜索的时候现在当前目录搜索,再去操作系统环境变量PYTHONPATH指定的路径中搜索,最后去Python标准库搜索。有可能会出现用户工作目录中的包在py文件中无法使用的情况,这时候需要我们手动的把相应的包移动到Python的安装目录下的py+版本号\Lib\site-packages中。或者指定包的安装目录。 pip install -t py安装路径\Lib\site-packages 包名


💫常用的指令


🥴升级pip版本


pip install --upgrade pip



🥴常规库的安装


pip install 库名
• 1


🥴指定库的版本安装


pip install 库名==版本号


🥴卸载已安装的库


pip uninstall 库名
• 1


🥴列出已经安装的库


pip list
• 1


🥴将已经安装的库列表保存到文本文件中


pip freeze > 文件名


🤺模块与包🤺


💫基本概念


什么是模块?

模块指的是一块具有共同特点的代码。在Python中一个模块就是一个.py文件。Python的内置模块是用C语言编写的程序,可以使用C/C++扩展编写模块。

什么是包?

在Python中包就是一个文件夹,一个包中可以包含很多子包。每个包中至少包含一个__init__.py文件,在进行导包的时候首先执行__init__.py文件。

.pyc文件是干嘛的?

每个包中在被导入之后都会生成一个__pycache__文件夹。内部包含.pyc文件。.pyc结尾的文件是一个编译后的字节码文件。下次导包的时候会根据.py与.pyc的时间戳进行对比。如果没有修改就直接通过.pyc文件导入。生成.pyc文件是自动的,不需要程序员插手。


💫几种常见的导包方式


普及一个小知识

成员作用符(C++中指的是某对象的某成员) (Python中用于限定某模块中的某方法或函数、类)

.

域作用符(C++指某个命名空间下的某个类)(Python中目前木有见过)

: :

🥴1.导入模块


# 导入模块
import math
# 使用模块中的元素
math.pi


🥴2.从包中导入模块


from http import server
print(server.__name__)

🥴3.从包中导入模块中的元素


from http.server import __name__
print(__name__)


🤺运行时包、模块的管理🤺

💫什么时间导包?按什么顺序导包


Python解释器在主程序运行开始的时候将所有要用到的包导入。如果多次导入仅仅只会执行包内的代码一次。如果不重新加载包或动态导包。那么旧包中的内容更新后运行中的Python程序不会感受到。导包的搜索顺序一般如下:


当前目录

操作系统环境变量PYTHONPATH

Python标准库目录

sys.path 这是一个列表,搜索包的时候会迭代这个列表中的所有路径(可以人为的向列表中添加路径)

一般结合sys.path[0]------当前工作路径使用。可以自定义包的位置

值得注意的是:sys.path[0]并不会随着代码所在的模块改变而改变(sys.path[0]存的是主程序文件所在的路径)

主程序就是__name__==__main__的程序(也就是运行入口模块),普通模块的__name__是自己的模块名。

导包的时候会先将被导包程序中的代码运行一遍(除被导入模块中__name__=="__main__"下面的代码)


💫重新加载包


解决程序运行过程中,导入的包更新的问题。


import importlib
import 我的包名
importlib.reload(我的包名)


💫动态导包(运行过程中导包)


导包时程序刚开始运行时候的工作,如果当时不进行包的导入可以后期动态的通过该方法进行导包,import 关键字底层调用的也是这个函数进行导包。


动态导包使用的是__import__(),直接将要导入的包名(字符串形式)传进函数内即可。

eg:


m=__import__("sys")


🤺打包项目🤺


可以使用pip install PyInstaller 安装打包工具
然后切换到你要打包项目的主程序所在的目录,使用pyinstaller -F 文件所在的路径打包.py文件
(-F是只生成一个可执行文件)
目录
相关文章
|
2天前
|
存储 Python
SciPy 教程 之 SciPy 稀疏矩阵 4
SciPy 教程之 SciPy 稀疏矩阵 4:介绍稀疏矩阵的概念、类型及其在科学计算中的应用。SciPy 的 `scipy.sparse` 模块提供了处理稀疏矩阵的工具,重点讲解了 CSC 和 CSR 两种格式,并通过示例演示了如何创建和操作 CSR 矩阵。
20 3
|
3天前
|
存储 Python
SciPy 教程 之 SciPy 稀疏矩阵 2
SciPy教程之SciPy稀疏矩阵2:介绍稀疏矩阵的概念、应用场景及scipy.sparse模块的使用。重点讲解CSC和CSR两种稀疏矩阵类型及其常用方法,如data属性和count_nonzero()方法。
23 4
|
3天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
1天前
|
算法 Python
SciPy 教程 之 SciPy 图结构 1
SciPy 图结构教程介绍了图的基本概念及其在算法中的应用。图由节点和边组成,节点代表对象,边表示对象间的连接。SciPy 的 `scipy.sparse.csgraph` 模块提供了处理图结构的工具。邻接矩阵用于表示节点间的连接关系,分为有向图和无向图两种类型。无向图的边是双向的,而有向图的边则有明确的方向。
8 0
|
1天前
|
存储 Python
SciPy 教程 之 SciPy 稀疏矩阵 5
SciPy 稀疏矩阵教程介绍了稀疏矩阵的概念及其在科学计算中的应用。SciPy 的 `scipy.sparse` 模块提供了处理稀疏矩阵的功能,主要使用 CSC(压缩稀疏列)和 CSR(压缩稀疏行)两种格式。通过示例展示了如何创建 CSR 矩阵、查看非零元素及转换为 CSC 格式。
10 0
|
4天前
|
数据采集 缓存 程序员
python协程使用教程
1. **协程**:介绍了协程的概念、与子程序的区别、优缺点,以及如何在 Python 中使用协程。 2. **同步与异步**:解释了同步与异步的概念,通过示例代码展示了同步和异步处理的区别和应用场景。 3. **asyncio 模块**:详细介绍了 asyncio 模块的概述、基本使用、多任务处理、Task 概念及用法、协程嵌套与返回值等。 4. **aiohttp 与 aiofiles**:讲解了 aiohttp 模块的安装与使用,包括客户端和服务器端的简单实例、URL 参数传递、响应内容读取、自定义请求等。同时介绍了 aiofiles 模块的安装与使用,包括文件读写和异步迭代
8 0
|
5天前
|
Python
SciPy 教程 之 SciPy 模块列表 16
SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
10 0
|
6天前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy 教程之 SciPy 模块列表 15 - 功率单位。常量模块包含多种单位,如公制、质量、时间等。功率单位中,1 瓦特定义为 1 焦耳/秒,表示每秒转换或耗散的能量速率。示例代码展示了如何使用 `constants` 模块获取马力值(745.6998715822701)。
10 0
|
6月前
|
Python 人工智能 数据可视化
Python模块与包(八)
Python模块与包(八)
49 0
Python模块与包(八)
|
2月前
|
人工智能 数据可视化 搜索推荐
Python异常模块与包
Python异常模块与包