[python]模块

[toc]


1.模块(module)

  • 标准库模块 如random(随机数)、math(数学运算)、time(时间)、file(文件处理)、os(和操作系统交互)、sys(和解释器交互)

  • 第三方模块

2.包(package)

1.包的概念和结构

  • 包其实就是一个含有名为__init__.py文件的文件夹。

  • 包中可以有子包,子包中也必须有__init__.py的文件。

2.__init__.py的三个核心作用:

  1. 作为包的标识

  2. 用来实现模糊导入 在__init__.py中定义__all__变量,该变量为一个列表,例如__all__=["module_A","module_B"],这意味着, from module import * (该语句表示导入模块中所有成员,即模糊导入。) 会导入以上module_A和module_B两个子模块。

  3. 导入包实质上就是执行__init__.py文件,可以在__init__.py这个文件中做这个包的初始化、需要统一执行的代码、以及批量导入(例如在__init__.py中import导入其他模块)

3.包内引用

from .. import module_A 表示从上级目录导入模块module_A from . import module_B 表示从本级目录导入模块mdule_B

3.模块化编程

  • 模块化编程的一般流程:

    1. 编写API[1],进行功能描述

    2. 编码实现API中描述的功能

    3. 在模块中编写测试代码并消除全局变量

    4. 使用私有函数实现不被外部调用的模块函数

  1. 编写API

    • 在pycharm中,import导入模块后,ctrl+鼠标左键单击可以进入到模块中

    • import导入模块后,用print(模块.__doc__)可以查看表述信息

  2. 模块的创建和测试代码

    • 通过print(模块.__name__)可以查看模块名称。

    • 正常情况下,模块名字对应源文件名。仅有一个例外,就是当一个模块被作为程序入口时(即自己运行的时候),它的__name__的值为“__main__”。

    • 可以根据这个特点,在需要测试的代码前加入

      if __name__=="__main__":
      

      语句,只有模块自己运行的时候才执行if __name__=="__main__":后面的语句,其他程序导入模块的时候不执行后面的语句。

4.模块的导入

1.可以通过import语句导入的模块

  1. (.py文件)用python编写的代码

  2. 已被编译为共享库或 DLL 的 C 或 C++扩展,例如math库

  3. 包好一组模块的包

  4. 使用 C 编写并链接到 python 解释器的内置模块

2. 导入模块的语法

  1. import module

    1. import module # 导入一个模块

    2. import module_1,module_2... # 导入多个模块

    3. import module as m # 导入模块并用新名字

  2. from module import module_a

    1. from module import * #导入模块中的所有成员

  3. __import__(module)

    1. m = __import__(module)效果和import module as m相同 一般不建议使用__import__()导入,原因是在python2和python3中有差异,会导致意外错误

    2. 推荐使用importlib模块

    import importlib
    a = importlib.import_module("math")
    print(a.pi)
    

3.模块的加载问题

模块在导入后,会将模块中的所有语句执行一次,有且只有一次,之后再次导入不会再执行。 一个模块不管被导入多少次,在整个解释器中只会生成一个实例对象。 如果想重新加载,可以使用importlib模块中的reload()函数,如下:

import test    # 加载test模块
import test    # 不会显示
import importlib
importlib.reload(test)    # 再次加载test模块

4.模块的搜索路径 和 sys.path

  • python解释器寻找模块文件的顺序:

    1. 内置模块,例如math

    2. 当前目录

    3. 程序的主目录

    4. pythonpath目录(如果已经设置pythonpath环境变量)

    5. 标准链接库目录

    6. 第三方库目录(site-packages目录)

    7. .pth文件的内容(如果存在的话)

    8. sys.path.append()临时添加的目录

  • 环境变量中添加pythonpath 计算机→右键→属性→高级系统设置→高级→环境变量 新建→变量名:pythonpath→变量值:d:/a;d:/b; 可以把模块放在pythonpath中,在搜的时候就会找该目录下对应的模块。

  • 标准链接库

  • 第三方库site-packages 在 lib文件夹 中

  • .pth文件的写法 在site-packages文件夹下新建名为.pth的文件(系统中无法新建名为.pth的文件,所以可以写成.pth.),用记事本打开,每一行对应一个文件夹地址,如下:

    # 一行一个代码
    g:\a
    g:\b
    g:\c
    
  • sys.path.append() 例如:

    import sys
    sys.path.append("D:/")
    print(sys.path)
    

    表示在这个文件中给临时添加了目录为"D:/"的环境变量搜索路径,出了这个代码实效

使用sys.path可以打印模块的搜索路径(除了内置模块外),代码如下:

import sys
print(sys.path)

运行结果如下:

"E:\【mooc】\Basic Computer Science\project\venv\Scripts\python.exe" "E:/【mooc】/Basic Computer Science/project/4_计算机系统的程序员视角/4.5  文件合并工具II/test.py"
[
'E:\\【mooc】\\Basic Computer Science\\project\\4_计算机系统的程序员视角\\4.5  文件合并工具II', 
'E:\\【mooc】\\Basic Computer Science\\project', 
'D:\\pythonpath', 
'D:\\Program Files\\PyCharm 2021.3.1\\plugins\\python\\helpers\\pycharm_display', 
'D:\\Program Files\\Python310\\python310.zip', 
'D:\\Program Files\\Python310\\DLLs', 
'D:\\Program Files\\Python310\\lib', 
'D:\\Program Files\\Python310', 
'E:\\【mooc】\\Basic Computer Science\\project\\venv', 
'E:\\【mooc】\\Basic Computer Science\\project\\venv\\lib\\site-packages', 
'D:\\Program Files\\PyCharm 2021.3.1\\plugins\\python\\helpers\\pycharm_matplotlib_backend'
]

行3:当前目录 行4:程序主目录 行5:pythonpath目录 行6-行10:标准库目录 行11-行12:第三方库 行13:

将环境变量由项目下的虚拟环境切换到python程序后,执行代码得到以下结果:

"D:\Program Files\Python310\python.exe" "E:/【mooc】/Basic Computer Science/project/4_计算机系统的程序员视角/4.5  文件合并工具II/test.py"
[
'E:\\【mooc】\\Basic Computer Science\\project\\4_计算机系统的程序员视角\\4.5  文件合并工具II', 
'E:\\【mooc】\\Basic Computer Science\\project', 'D:\\pythonpath', 
'D:\\Program Files\\PyCharm 2021.3.1\\plugins\\python\\helpers\\pycharm_display',
'D:\\Program Files\\Python310\\python310.zip', 
'D:\\Program Files\\Python310\\DLLs', 
'D:\\Program Files\\Python310\\lib', 
'D:\\Program Files\\Python310', 
'D:\\Program Files\\Python310\\lib\\site-packages', 
'D:\\Program Files\\PyCharm 2021.3.1\\plugins\\python\\helpers\\pycharm_matplotlib_backend'
]

5.模块的发布与安装

1.本地发布与安装

  • 本地发布:

    1. 创建一个文件夹,把要发布的包放进去

    2. 在文件夹中创建setup.py文件,内容如下:

    from distutils.core import setup
    
    setup(
    name='baizhanMath2', # 对外我们模块的名字
    version='1.0', # 版本号
    description='这是第一个对外发布的模块,测试哦', #描述
    author='gaoqi', # 作者
    author_email='gaoqi110@163.com',
    py_modules=['baizhanMath2.demo1','baizhanMath2.demo2'] # 要发布的模块
    )
    
    1. 右键文件夹→ Open In → Open In Terminal,输入以下代码:

    python setup.py sdist
    

    在文件夹下会生成一个名为dist的文件夹,里面是可以发布的文件。

  • 安装: 解压到项目目录后,pycharm中右键解压后文件夹→ Open In → Open In Terminal,输入以下代码:

    python setup.py install
    
    • 安装中存在一个问题 在安装的时候,输入代码,无法安装到虚拟的运行环境venu(virtual environment)中,安装到了python安装目录下的package文件夹中的,不知道什么原因。

2.上传模块到PyPI

  1. 注册 PyPI网站:http://pypi.python.org

  2. 创建用户信息文件 .pypirc

    • 方法一:使用命令(适用 Linux) 输入并执行后 python setup.py register ,然后输入用户名和密码,即可。

    • 方法二:使用文件(适用 windows,Linux) 在用户的家目录下创建,里面内容为:

      [distutils]
      index-servers=pypi
      [pypi]
      repository = https://upload.pypi.org/legacy/
      username = 账户名
      password = 你自己的密码
      
    • 【注】: Linux 的家目录: ~/.pypirc Windows 的家目录是: c:/user/用户名 在windows下直接创建不包含文件名的文件会失败,因此创建时文件名为“.pypirc.”,前后都有两个点即可。

  3. 上传并远程发布 进入setup.py文件所在目录,使用命令python setup.py sdist upload,即可将模块代码上传并发布

  4. 管理模块

今天看好多人不清楚第三方的安装方法,自己当初也因为安装第三方库弄得焦头烂额,就简单的把自己的知道的总结一下,如果有不合适或者错误的地方,欢迎大家指正。

我所了解的第三方库的安装大概有以下四种吧。

  • 第一种:文件安装(源码安装),直接谷歌模块名称或者进入GitHub进行下载模块至本地,可能是压缩包或者是xxx.whl文件: 压缩包:解压,然后在命令行中进入下载的模块所在的文件夹下,键入"python setup.py install”,等待模块的自动安装。 xxx.whl文件:确保将pip、wheel添加到系统变量中(建议安装python的时候,选中Add python.exe to Path(添加的环境变量),如果没有选择,谷歌如何添加环境变量),在命令行中进入下载的模块所在的文件夹下,键入"pip install xxx.whl”,等待模块的自动安装。

  • 第二种:在线批量安装相关模块(pip),这个模块提供了安装(install)、下载(download)、列表(list)、查看(show)、查找(search)、更新(install -U)等一系列用于安装和维护的子命令,相比于第一种方法,这种方法简单的多了,但是谁让我是小白呢,没少用第一种方法安装模块(手动无奈) 安装单个模块:直接在命令行输入“pip install 模块名称”例如:“pip install requests”,pip将会自动在线查找并下载requests模块,并安装该模块。 安装多个模块:直接新建一个TXT文件,把需要安装的模块名称写入TXT文件,中间用换行隔开,然后在命令行中进入新建文件的目录下,键入“pip install -r xxx.txt”(xxx.txt为新建的TXT文件名)。pip将逐个安装模块(如果其中有一个模块安装失败,将会自动退出,后续的模块不在安装)。

  • 第三种:自定义安装,自定义安装是指按照第三方库提供的方法和步骤进行安装,一般用于pip中没有登记的或者安装失败的第三方库。

  • 第四种:一些集成开发工具中也自带添加模块的方法,例如pycharm中,进入 file ---> Settings --->Project Interpreter 选中当前的解释器,然后右上角位置有个“+”的图标,点击进去,可以找到大量适合当前版本的模块,找到添加就可以了。 ————————————————

版权声明:本文为CSDN博主「wang__xg」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/wang909125961/article/details/79772868


  1. API:Application Programming Interface,应用程序编程接口,用于描述模块中提供的函数和类的功能描述和使用方法描述。导入模块后,通过help(模块名)查看模块的API。 ↩︎


本文章使用limfx的vscode插件快速发布