前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[编程经验] Python中的modlue和packages的区别

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

作者头像
用户1622570
发布2018-04-11 16:16:06
6700
发布2018-04-11 16:16:06
举报
文章被收录于专栏:机器学习和数学

今天聊一下,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

代码语言:javascript
复制
print("This is first modlue")


def fun(x):
    return x * 2

outer.py

代码语言:javascript
复制
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了。

代码语言:javascript
复制
#!/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,以及怎么安装。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习和数学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档