Python 包作用
在Python中,包(package)是一个有层次的模块命名空间,用于组织模块。包实际上是一个包含多个模块的目录,该目录下必须包含一个__init__.py文件,该文件可以是空文件,也可以包含包的初始化代码。
包的作用
组织代码: 包可以帮助我们更好地组织代码,将相关的模块放在同一个目录下,方便维护和管理。
避免命名冲突: 包可以避免模块之间的命名冲突,因为不同包下的模块可以有相同的名称。
命名空间: 包提供了一个命名空间,可以避免模块之间的命名冲突,并将模块按照功能进行分类。
模块、库、包在Python中有什么区别?
– 模块是一个包含Python定义和语句的文件,其名称就是文件名称(不包括.py后缀)。模块module,这个概念就是Python里的概念,一个模块就是一个py文件,然后包含多行代码执行一个或多个任务,库约等于模块。模块中可以包含变量、函数、类等内容,可以被其他程序引用。
– 库通常是一组相关的模块的集合,是为了解决某一类问题而封装的功能的集合。库library,这个概念并非Python里的概念,是从C语言过来的。库这个概念其实就是一堆代码一起完成一个或多个任务。非常类似函数,但是是以文件组织在一起。。Python中有许多标准库(如os、sys等),也可以通过pip安装第三方库(如numpy、pandas等)。库通常是在一个特定的领域提供了一系列函数和类,供使用者调用。
– 包是一组模块的集合,它和库的概念比较相似,但更加灵活。包实际上就是一个包含有特殊__init__.py文件的目录,这个目录下面可以有多个模块。包的使用使得模块更加有组织化,更易于维护和扩展。
总结一下,模块是单个文件,库是一组相关的模块,而包是一组模块的集合,它们在Python中各自有着不同的角色和用途。
Python的标准库函数
不需要下载安装,直接在.py文件中使用import导入即可使用
Python根目录下的lib目录(自带的标准库)
Python的第三方库函数
我们使用pip下载命令安装,第三方库都放在lib/site-packages中,属于第三方库,安装后import导入使用
包的搜索路径:
注意
,每一个包目录下面都会有一个__init__.py
的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py
可以是空文件,也可以有Python代码,因为__init__.py
本身就是一个模块。
当我们使用 import
语句的时候,Python解释器
是怎样找到对应的文件的呢?
这就涉及到 Python 的搜索路径,搜索路径是由一系列目录名
组成的,Python解释器
就依次从这些目录中去寻找所引入的模块。
这看起来很像环境变量,事实上,也可以通过定义环境变量的方式来确定搜索路径。
搜索路径是在 Python 编译或安装
的时候确定的,安装新的库应该也会修改。搜索路径被存储在 sys
模块中的 path 变量
在导入一个包的时候,Python
会根据 sys.path
中的目录来寻找这个包中包含的子目录。
默认情况下,Python解释器
会搜索当前目录、所有已安装的内置模块和第三方模块
,搜索路径存放在sys模块的path变量中。
目录只有包含一个叫做 __init__.py
的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫做 string)不小心的影响搜索路径中的有效模块。
总结,python找导入的文件的顺序和地方(sys模块,sys.path):
1、执行文件当前所在的目录
2、当前工程目录(是pycharm添加进去的)
3、python根目录下的lib目录(python安装时自带的标准库)
4、python根目录下的lib/site-packages(要通过pip命令安装的)
模块name属性
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__
属性来使该程序块仅在该模块自身运行时执行。
#!/usr/bin/python3
# Filename: using_name.py
if __name__ == '__main__':
print('程序自身在运行')
else:
print('我来自另一模块')
运行输出如下:
$ python using_name.py
程序自身在运行
$ python
>>> import using_name
我来自另一模块
说明: 每个模块都有一个__name__
属性,当其值是__main__
时,表明该模块自身在运行,否则是被引入。
模块作用域
在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。在Python中,是通过_
前缀来实现的。
正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等;
类似 __xxx__
这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的 __author__
,__name__
就是特殊变量,hello模块定义的文档注释也可以用特殊变量 __doc__
访问,我们自己的变量一般不要用这种变量名;
类似_xxx
和__xxx
这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等;
之所以我们说,private函数和变量“不应该”被直接引用,而不是不能
被直接引用,是因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。
private
函数或变量不应该被别人引用,那它们有什么用呢?请看例子:
def _private_1(name):
return 'Hello, %s' % name
def _private_2(name):
return 'Hi, %s' % name
def greeting(name):
if len(name) > 3:
return _private_1(name)
else:
return _private_2(name)
我们在模块里公开greeting()函数,而把内部逻辑用private函数隐藏起来了,这样,调用greeting()函数不用关心内部的private函数细节,这也是一种非常有用的代码封装和抽象的方法,外部不需要引用的函数全部定义成 private
,只有外部需要引用的函数才定义为 public
。
如何导入包和模块
首先说明一下:import导入的可以是包,也可以是模块。导入过程,导入包和模块后通过"."调用方法
第一种导入方法(直接导入)
(1)import包/方法
(2)调用具体方法
1 2 |
|
#注意# randint是random模块下的一个具体方法(def)
第二种导入方法(跳跃式)
(1)from 包/模块 import 模块/方法
(2)调用具体方法
1 2 3 |
|
#注意# 使用from就直接跳跃到time下的sleep方法了
第三种导入方法(贪婪式)
(1)from 包/模块 import所有模块/方法
(2)调用具体方法
1 2 3 |
|
#注意# 使用from time import *把所有方法都导入了
第四种导入方法(自定义名称)
(1)from 包/模块 import所有模块/方法
(2)调用具体方法
1 2 3 4 5 |
|
调用的具体方法 sl(10)和sleep(10)效果一样
#注意# 自定义你在程序中使用该方法的名称
如何自定义一个包/模块
一个py文件就是一个模块,一个具有__init__.py的"文件夹"以及其他py文件的就是包
创建模块
创建包
如果包/模块不在主程序同级别目录下
Python 包管理器命令
pip install 是一个 Python 包管理器命令,用于安装 Python 包。pip 是 Python 的一个重要工具,可以用来安装、升级和卸载 Python 包。
pip install 命令的一些常见参数有
-r:从一个需求文件中安装所有的包。
-U 或 --upgrade:升级一个已经安装的包到最新版本。
-I 或 --ignore-installed:即使包已经安装,也重新安装。
--no-cache-dir:禁止使用缓存,每次都从网络下载。
--user:安装到用户目录,而不是系统目录。
-e 或 --editable: 以保持对源代码编辑能力的模式安装这个包。
下面是pip的常用命令和用法:
安装包:使用pip install命令来安装Python包。例如,要安装名为requests的包,可以执行以下命令:
pip install requests
升级包:使用pip install --upgrade命令来升级已安装的包。例如,要升级requests包,可以执行以下命令:
pip install --upgrade requests
卸载包:使用pip uninstall命令来卸载已安装的包。例如,要卸载requests包,可以执行以下命令:
pip uninstall requests
显示已安装的包:使用pip list命令来列出所有已安装的Python包及其版本。
pip list
导出和安装依赖:使用pip freeze命令将当前环境的包及其版本导出到一个文本文件中,通常被称为"requirements.txt"。然后,可以使用pip install -r命令根据该文件安装相同的依赖关系。例如:
pip freeze > requirements.txt
pip install -r requirements.txt
搜索包:使用pip search命令来在PyPI(Python Package Index)上搜索包。例如,要搜索名为numpy的包,可以执行以下命令:
pip search numpy
参考:
python 包作用_mob64ca12ed7b35的技术博客_51CTO博客