[编程经验] 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,以及怎么安装。
好了,今天到这里了,有不懂的可以问我~
- 十分钟学perl够用(客服MM都懂了)
- Java多线程并发编程一览笔录
- Tomcat6/7应用服务器-禁用RC4等弱密码套件
- mybaits3整合spring总结
- 如何使用Airgeddon找回WiFi密码
- 设计缺陷将导致亚马逊Echo变身成为监听设备
- Unity引擎与C#脚本简介
- Redis分布式缓存系统Lua脚本食用指引
- 基于复杂方案OWSAP CsrfGuard的CSRF安全解决方案(适配nginx + DWR)
- XMLHttpRequest对象如何兼容各浏览器使用?
- Java使用wsdl生成axis版本webservice服务端/客户端代码
- Java微信支付快速入门&工具类
- redis集群 - linux安装与配置笔记
- Apache RocketMQ 4.0.0 - linux安装与配置笔记
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法