[编程经验] Python中的modlue和packages的区别

时间:2022-05-08
本文章向大家介绍[编程经验] Python中的modlue和packages的区别,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

今天聊一下,Python中模块和包的区别和联系,以及怎么创建自己的package,通过学习,你可以明白我们平时用Python的时候,到底import 了什么东西。我尽量讲的详细一点,大神可以点左上角X。

下面可以先照着我说的做一遍,做完之后,我再解释。

首先打开Pycharm(没用过的可以先百度安装,很简单),左上角点

File--> New Project

然后这里随便取个名字,我这里叫做 packages_demo

其实这里说随便,其实不管是什么编程语言,文件,函数的命名都是有讲究的,尽量取的能代表你要做的事情,增加代码易读性。

然后右键刚才新建的包的,选择Python File,取名为setup.py

然后再点我们工程名字,选择Directory,新建两个文件夹, 一个取名为packages_demo。另一个叫demo。

然后再packages_demo文件夹下面,新建两个Python File,一个叫 __init__.py, 一个叫 __version__.py。顺便再建一个Python File 叫firsrt.py 。另外在demo文件夹下新建一个Python File 叫做outer.py。

好,现在我们的工程结构是这样的:

好,先停一下,我们讲一下细节。

刚开始学Python的时候,可能你是在Python Shell 里面敲了一个print("Hello World !")

后来你也可能也会在Shell里面写个函数。但是等你关掉Shell 的时候,你写的代码就没了,也就是没有保存起来,问题就来了,写的代码都没保存,那后面想用的时候就没法用。

所以你会在Shell里面选择新建文件,然后保存,命名为demo.py。 然后这时候就可以在Shell里面import 进来你写的demo 包了,这个包就是Python中的module,Python中的包包括内置的包和第三方包,内置的包不需要安装,第三方包需要手动安装,而一般的包都可以通过pip来安装,那我怎么知道,那些可以用pip,那些不可以用pip呢? 你安装一下,安装成功了,就说明可以啊。。。

另外一种安装方式就是下载包的源代码,然后执行 python setup.py install , 同样也可以安装,还有些包有.whl后缀的文件,这个也可以直接pip xxx.whl install 运行安装, whl其实是已经编译好的pyd文件,这样在本地安装的时候就不需要编译,pyd文件是怎么产生的? 是我们在编译.py文件的时候,Python解释器自动生成的。

关于Python包还有一个需要掌握的就是 下面这个

if __name__ == "__main__"

这一句是什么意思? 当我们在Shell里面import demo,并计算1,2的和的时候,下面那句并没有输出。然后我们Ctrl+F5,执行demo.py文件,他输出结果:

这就说明,if __name__ == "__main__"的作用就是说,下面的代码只有在直接执行demo.py时才运行,而import 的时候是不执行的。

好,为了让大家彻底理解,我我们在demo.py中加入一句,print(__name__)

然后在Shell里面import demo 出现结果为demo。 然后调用demo的__name__方法。输出也是demo。

然后直接运行demo.py,显式的名字为 __main__,这你就明白了吧。。

到这,关于module 需要了解的就这么多了,最后说一下,Python中的双下划线开头表示的是特殊方法名。也就是说,name是Python中的一个特殊方法,所以加了双下划线。

我们用dir()方法可以查看demo这个module下面都定义了哪些方法

可以看到这里除了add以外,还有几个特殊方法,这个特殊方法,是Python预定义好的。

然后,注意一下,里面有个__package__的特殊方法,调用一下

结果显示为空,也就说它没有package,其实这里也可以看出来,package是比module高一级的东西。

package在Python中的意思就是多个module组成起来就是package了。

关于package有两点需要注意的,一是每个package下面需要包含 __init__.py文件,二是package的好处在于方便代码管理和避免命名冲突。

好,然后我们回到开始让大家新建的文件。其实就是新建了一个工程,在工程下面新建一个packages和一个module, 一个叫package_demo,一个叫demo。然后我们在first.py和outer.py下面随便写一点代码:

first.py

print("This is first modlue")


def fun(x):
    return x * 2

outer.py

from packages_demo import first


def fun():
    return first.fun(x=3)

if __name__ == "__main__":
    results = fun()
    print(results)

然后看一下,setup.py 这个文件,这里要介绍的是setuptools这和包,这是一个Python自带的包管理工具,可以编译,安装,管理Python的包。下面是一个简单的demo展示,代码很少,这样就可以创建一个我们自己的package了。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from setuptools import find_packages, setup

NAME = 'packages_demo'

setup(
    name=NAME,
    version="0.0.1",
    packages=find_packages()
)

然后我们打开Pycharm下面的Terminal命令行,执行python setup.py install.

这样我们就安装了一个自己写的package。是不是很帅?

安装完之后,文件夹下面多了这个三个文件夹,这个就是编译好的Python的包

然后我们也可以在我们的Shell里面直接调用了,这就表明,我们已经封装好了一个Python的package,这个packages_demo就和平时用的os, sys, pandas等等包的原理没有区别。

至此,Python中module和package的区别和联系就介绍完了,回顾一下我们主要讲的有什么是module及注意的地方,什么是package,如何创建自己的package,以及怎么安装。

好了,今天到这里了,有不懂的可以问我~