【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是只生成一个可执行文件)
相关文章
|
6天前
|
BI Python
SciPy 教程 之 Scipy 显著性检验 8
本教程介绍SciPy中显著性检验的应用,包括如何利用scipy.stats模块进行显著性检验,以判断样本与总体假设间的差异是否显著。通过示例代码展示了如何使用describe()函数获取数组的统计描述信息,如观测次数、最小最大值、均值、方差等。
13 1
|
7天前
|
Python
SciPy 教程 之 Scipy 显著性检验 6
显著性检验是统计学中用于判断样本与总体假设间是否存在显著差异的方法。SciPy的scipy.stats模块提供了执行显著性检验的工具,如T检验,用于比较两组数据的均值是否来自同一分布。通过ttest_ind()函数,可以获取两样本的t统计量和p值,进而判断差异是否显著。示例代码展示了如何使用该函数进行T检验并输出结果。
10 1
|
11天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
28 5
|
8天前
|
Python
SciPy 教程 之 Scipy 显著性检验 3
本教程介绍Scipy显著性检验,包括其基本概念、原理及应用。显著性检验用于判断样本与总体假设间的差异是否显著,是统计学中的重要工具。Scipy通过`scipy.stats`模块提供了相关功能,支持双边检验等方法。
17 1
|
11天前
|
机器学习/深度学习 Python
SciPy 教程 之 SciPy 插值 2
SciPy插值教程:介绍插值概念及其在数值分析中的应用,特别是在处理数据缺失时的插补和平滑数据集。SciPy的`scipy.interpolate`模块提供了强大的插值功能,如一维插值和样条插值。通过`UnivariateSpline()`函数,可以轻松实现单变量插值,示例代码展示了如何对非线性点进行插值计算。
14 3
|
13天前
|
机器学习/深度学习 Python
SciPy 教程 之 SciPy 空间数据 6
本教程介绍了SciPy处理空间数据的方法,包括使用scipy.spatial模块进行点位置判断、最近点计算等内容。还详细讲解了距离矩阵的概念及其应用,如在生物信息学中表示蛋白质结构等。最后,通过实例演示了如何计算两点间的余弦距离。
23 3
|
12天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 空间数据 7
本教程介绍了SciPy的空间数据处理功能,涵盖如何使用`scipy.spatial`模块进行点的位置判断、最近点计算等操作。还详细解释了距离矩阵的概念及其在生物信息学中的应用,以及汉明距离的定义和计算方法。示例代码展示了如何计算两个点之间的汉明距离。
21 1
|
8天前
|
Python
SciPy 教程 之 Scipy 显著性检验 5
显著性检验用于判断样本与总体假设间的差异是否由随机变异引起,或是假设与真实情况不符所致。SciPy通过scipy.stats模块提供显著性检验功能,P值用于衡量数据接近极端程度,与alpha值对比以决定统计显著性。
11 0
|
9天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 插值 3
本教程介绍了SciPy中的插值方法,包括什么是插值及其在数据处理和机器学习中的应用。通过 `scipy.interpolate` 模块,特别是 `Rbf()` 函数,展示了如何实现径向基函数插值,以平滑数据集中的离散点。示例代码演示了如何使用 `Rbf()` 函数进行插值计算。
16 0
|
9天前
|
Python
SciPy 教程 之 Scipy 显著性检验 1
本教程介绍Scipy显著性检验,包括统计假设、零假设和备择假设等概念,以及如何使用scipy.stats模块进行显著性检验,以判断样本与总体假设间是否存在显著差异。
15 0