python里面模块和包的区别是什么?

有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt函数,必须用语句#include 引入math.h这个头文件,否则是无法正常进行调用的。

那么在Python中,如果要引用一些其他的函数,该怎么处理呢?

在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一下Python中的模块。

说的通俗点:模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块。

1.每一个以扩展名py结尾的python源代码文件都是一个模块。

2.模块名同样也是一个标识符,需要符合标识符的命名规范。

3.在模块中定义的全局变量、函数、类都是提供给外界直接使用的工具。

4.模块就好比工具包,要想使用这个工具包中的工具,就需要先导入这个模块。

在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。

说明:在导入模块时,每个导入应该独占一行(推荐)import 模块1

通过模块名使用模块提供的工具---全局变量、函数、类。

只用as指定模块的别名。

如果模块的名字太长,可以使用as指定模块的别名,以方便在代码中的使用。import 模块名1 as 模块别名

注意:模块别名应该符合托峰值命名规范

为什么要加上模块名呢?

因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以如果像上述这样引入模块的时候,调用函数必须加上模块名。

1.如果想从某一模块中导入部分工具,就可以使用from...import的方式。

2.import模块名是一次性把模块中所有的工具全部导入,并且通过模块名/别名访问。#从模块中导入某一个工具

1.不需要通过模块名. 的方式使用模块提供的工具

2.可以直接使用模块提供的工具  --- 全局变量、函数、类

1.如果两个模块,存在同名的函数,name后导入模块的函数会覆盖先导入的函数

2.开发时import代码应该统一写在代码的顶部,更容易及时发现冲突

3.如果发生冲突,可以使用as关键字,给其中一个工具起一个别名from...import *

#从模块中导入所有工具

这种法师不推荐使用,因为函数重名并没有任何的提示,出现问题不好排查

test.py中使用demo.py模块#导入模块中的所有工具,同时为模块指定别名为myTest

#导入模块中所有工具,不推荐,工具同名不好排查

#为导入工具Cat类指定别名Test_Cat,防止与其他模块中工具重名

相关推荐:《Python视频教程》

四、python模块导入的搜索路

任何的.pth文件的内容(如果存在的话).新功能,允许用户把有效果的目录添加到模块搜索路径中去 .pth后缀的文本文件中一行一行的地列出目录。

这四个组建组合起来就变成了sys.path了,

当python import模块的时候,就通过sys.path里面的目录列表下面去查找。

#因为sys.path是一个列表,所以可以在后面追加一个自定的模块路径

#通过insert可以将路径插到前面

在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。

在实际开中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息,例如:test.py文件def add(a,b):

如果此时,在demo.py文件中引入了此文件的话,想想看,测试的那段代码是否也会执行呢!import test

至此,可发现test.py中的测试代码,应该是单独执行test.py文件时才应该执行的,不应该是其他的文件中引用而执行。为了解决这个问题,python在执行一个文件时有个变量__name__

可以根据__name__变量的结果能够判断出,是直接执行的python脚本还是被引入执行的,从而能够有选择性的执行测试代码。

这样我们在开中测试的代码,就不会在其他模块中出现了。

如果一个文件中有__all__变量,那么也就意味着只有这个变量中的元素,才会被from xxx import *时导入。

七、系统sys模块介绍

sys是python自带模块,常用的函数有:

sys.argv: 实现从程序外部向程序传递参数。

sys.path: 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。

sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键。因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。其第一个元素是程序本身,随后才依次是外部给予的参数。

下面我们通过一个极简单的test.py程序的运行结果来说明它的用法。#test.py

将test.py保存在c盘的根目录下。

得到的结果是C:\test.py,这就是0指代码(即此.py程序)本身的意思。

然后我们将代码中0改为1 :

保存后,再从控制台窗口运行,这次我们加上一个参数,输入:test.py what#test.py

得到的结果就是我们输入的参数what,看到这里你是不是开始明白了呢。

那我们再把代码修改一下:

保存后,再从控制台窗台运行程序,这次多加几个参数,以空格隔开:

得到的结果为[‘b’, ’c’, ’d’, ’e’, ’f’]

应该大彻大悟了吧。Sys.argv[ ]其实就是一个列表,里边的项为用户输入的参数,关键就是要明白这参数是从程序外部输入的,而非代码本身的什么地方,要想看到它的效果就应该将程序保存了,从外部来运行程序并给出参数。

程序中间的退出, arg=0为正常退出

一般情况下执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它的程序,表示你可以在主程序中捕获对sys.exit的调用。(0是正常退出,其他为异常)当然也可以用字符串参数,表示错误不成功的报错信息。import sys

程序首先打印hello,在执行exit(90),抛异常把90传给values,values在传进函数中执行,打印90程序退出。后面的”come?”因为已经退出所以不会被打印. 而此时如果把exitfunc函数里面的sys.exit(0)去掉,那么程序会继续执行到输出”come?”。

sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。它拥有字典所拥有的一切方法。import sys

首发于公众号:Python编程时光

以上仅介绍了 easy_install 的一些常用的方法,想要了解更多,你可以点击官方文档:

总结一句:setuptools 是官方提供的一个专业用于包分发的工具,若只从安装的角度来看,它的功能确实简单。它更大的意义是对包的分发很有用,定制化程序非常高,我们现在也还在用它进行版本包的发布。

ext_modules 参数用于构建 C 和 C++ 扩展扩展包。其是 Extension 实例的列表,每一个 Extension 实例描述了一个独立的扩展模块,扩展模块可以设置扩展包名,头文件、源文件、链接库及其路径、宏定义和编辑参数等。如:

setup.py 的参数非常多,能够不借助文档写好一个setup.py好像没那么简单。为了备忘,我整理了 setup 函数常用的一些参数:

8. 打包辅助神器PBR 是什么?

pbr 会读取和过滤setup.cfg中的数据,然后将解析后的数据提供给 setup.py 作为参数。包含如下功能:

到此,我讲了三种编写使用 setup.py 的方法

  • 使用命令行参数指定,一个一个将参数传递进去(极不推荐)
  • 使用 pbr ,在 setup.cfg 中指定(易于管理,更推荐)

使用 sdist 将根据当前平台创建默认格式的存档。在类 Unix 平台上,将创建后缀后为 .tar.gz 的 gzip 压缩的tar文件分发包,而在Windows上为 ZIP 文件。

当然,你也可以通过指定你要的发布包格式来打破这个默认行为

你可以指定的格式有哪些呢?

创建一个压缩的tarball和一个zip文件。可用格式为:

对以上的格式,有几点需要注意一下:

  • 在版本3.5中才添加了对 xztar 格式的支持
  • zip 格式需要你事先已安装相应的模块:zip程序或zipfile模块(已成为Python的标准库)
  • ztar 格式正在弃用,请尽量不要使用

另外,如果您希望归档文件的所有文件归root拥有,可以这样指定

2、构建二进制分发包。

在windows中我们习惯了双击 exe 进行软件的安装,Python 模块的安装也同样支持 打包成 exe 这样的二进制软件包。

而在 Linux 中,大家也习惯了使用 rpm 来安装包,对此你可以使用这条命令实现 rpm 包的构建

若你的项目,需要安装多个平台下,既有 Windows 也有 Linux,按照上面的方法,多种格式我们要执行多次命令,为了方便,你可以一步到位,执行如下这条命令,即可生成多个格式的进制包

正常情况下,我们都是通过以上构建的源码包或者二进制包进行模块的安装。

但在编写 setup.py 的过程中,可能不能一步到位,需要多次调试,这时候如何测试自己写的 setup.py 文件是可用的呢?

这时候你可以使用这条命令,它会将你的模块安装至系统全局环境中

如若你的项目还处于开发阶段,频繁的安装模块,也是一个麻烦事。

这时候你可以使用这条命令安装,该方法不会真正的安装包,而是在系统环境中创建一个软链接指向包实际所在目录。这边在修改包之后不用再安装就能生效,便于调试。

通过上面的学习,你一定已经学会了如何打包自己的项目,若你觉得自己开发的模块非常不错,想要 share 给其他人使用,你可以将其上传到 PyPi (Python Package Index)上,它是 Python 官方维护的第三方包仓库,用于统一存储和管理开发者发布的 Python 包。

如果要发布自己的包,需要先到 pypi 上注册账号。然后创建 ~/.pypirc 文件,此文件中配置 PyPI 访问地址和账号。如的.pypirc文件内容请根据自己的账号来修改。

然后使用这条命令进行信息注册,完成后,你可以在 PyPi 上看到项目信息。

注册完了后,你还要上传源码包,别人才使用下载安装

或者也可以使用 twine 工具注册上传,它是一个专门用于与 pypi 进行交互的工具,详情可以参考官网:,这里不详细讲了。

Python库与模块的区别是什么

模块、库主要区别在于他们的定义与所指范围不同。

模块:包含并且有组织的代码片段为模块,sample.py 其中文件名smaple为模块名字。

模块是一种以.py为后缀的文件,在.py文件中定义了一些常量和函数。模块的名称是该.py文件的名称。模块的名称作为一个全局变量__name__的取值可以被其他模块获取或导入。模块的导入通过ipmort来实现。

库:库的概念是具有相关功能模块的集合。这也是正是Python的一大特色之一,即具有强大的标准库,还有第三方库以及自定义模块。

Python中的库是借用其他编程语言的概念,没有特别具体的定义,Python库着重强调其功能性。在Python中,具有某些功能的模块和包都可以被称作库。模块有诸多函数组成,包由诸多模块机构化组成,库中也可以包含包、模块和函数。

专题推荐:python 模块 库 区别

我要回帖

更多关于 python模块大全 的文章

 

随机推荐