python中的框架、库、包、模块都是什么意思_python之基础
篇(⼋)——模块与包...
防伪码:忘情公⼦著
python中的模块
将代码量较⼤的程序分割成多个有组织的、彼此独⽴但⼜能互相交互的代码⽚段,这些⾃我包含的有组织的代码段就是模块。
模块在物理形式上表现为以.py结尾的代码⽂件:
⼀个⽂件被看作⼀个独⽴的模块,⼀个模块也可以被看作是⼀个⽂件
模块的⽂件名就是模块的名字加上扩展名.py
每个模块都有⾃⼰的名称空间
python允许"导⼊"其它模块以实现代码重⽤,从⽽也实现了将独⽴的代码⽂件组织成更⼤的程序系统:
在python中,模块也是对象
在⼀个模块的顶层定义的所有变量都在被导⼊时成为了被导⼊模块的属性
python程序架构:
⼀个python程序通常包括⼀个顶层程序⽂件和其它的模块⽂件(0个、1个或多个)
顶层⽂件:包含了程序的主要控制流程
模块⽂件:为顶层⽂件或其它模块提供各种功能性组件
模块⾸次导⼊(或重载)时,python会⽴即执⾏模块⽂件的顶层程序代码(不在函数内的代码)
⽽位于函数主体内的代码直到函数被调⽤后才会执⾏
可以使⽤help('modules')来查看系统中有哪些python的标准库模块。
模块的执⾏环境:
模块是被导⼊的,但模块也可以导⼊和使⽤其它模块,这些模块可以⽤python或其它编程语⾔写成
模块可内含变量、函数以及类来进⾏其⼯作,⽽函数和类可以包含变量和其它元素
模块分类:
a.标准库(⼜称内置模块)
b.开源模块(⼜称第三⽅模块)
c.⾃定义模块
导⼊模块:
在导⼊模块时只能使⽤模块名,⽽不能使⽤带.py后缀的模块⽂件名
import语句:导⼊指定的整个模块,包括⽣成⼀个以模块名命名的名称空间importmodule1[,module2[,...moduleN]]
建议⼀个import语句只导⼊⼀个模块importmoduleasmodule_alias
⼀旦使⽤了别名,则仅能使⽤别名进⾏调⽤
from-import语句:常⽤于只导⼊指定模块的部分属性⾄当前名称空间frommoduleimportname1[,name2[,...nameN]]
动态导⼊模块:
当我们知道模块的名称和路径,但是是以字符串的形式存在的,此时⽆法通过import语句直接导⼊
这时我们就能以动态导⼊模块的⽅式导⼊该模块importimportlib
modname=''
__import__(modname)
还可以使⽤以下官⽅推荐的⽅式动态导⼊模块,与上⾯的__import__(modname)效果⼀致:_module(modname)
import和from-import是赋值语句:
import和from是可执⾏语句,类似于def,因此,它们可以嵌套在if测试中,出现于def中等等
python执⾏到这些语句时才会对其进⾏解析,这意味着,所有来⾃模块的属性仅在import语句执⾏后才能使⽤
import和from都是隐性赋值语句:
import将整个模块对象赋值给⼀个变量名
from将⼀个或多个变量名赋值给导⼊此模块的模块中的同名对象
模块就是名称空间:
模块的名称空间可以通过属性__dict__或dir(M)获取
模块属性可以通过点号(.)运算符获取,格式为
模块是⼀个独⽴的作⽤域(本地变量就是全局变量)
import的⼯作机制:
import语句导⼊指定的模块时会执⾏三个步骤:
找到模块⽂件
在指定的路径下搜索模块⽂件
编译成字节码
⽂件导⼊时就会编译,因此,顶层⽂件的.pyc字节码⽂件在内部使⽤后会被丢弃
只有被导⼊的⽂件才会留下.pyc⽂件
执⾏模块的代码来创建其所定义的对象
模块⽂件中的所有语句会依次执⾏,从头⾄尾
⽽此步骤中任何对变量名的赋值运算,都会产⽣所得到的模块⽂件的属性
注意:模块只在第⼀次导⼊时才会执⾏如上步骤:
后续的导⼊操作只不过是提取内存中已加载的模块对象
reload()可⽤于重新加载模块
模块的顶层执⾏及被导⼊:
⼀个模块⽂件可以同时⽀持顶层执⾏(作为顶层⽂件)或被导⼊(作为模块⽂件)。
每个模块都有个名为__name__的内置属性,python会⾃动设置该属性:
如果⽂件是以顶层程序⽂件执⾏,在启动时,__name__的值为"__main__"
如果是被导⼊,则__name__的值为模块名
可以在模块⽂件中检测⾃⼰的__name__属性,以之实现在执⾏时运⾏指定的代码,常⽤于模块的⾃我测试。#!/usr/bin/python
deftestFunc():
print"Helloworld"
if__name__=="__main__":
testFunc()
模块搜索:
python解释器在import模块时必须先找到对应的模块⽂件,python将在以下这些⽬录中查找模块⽂件:
程序的主⽬录;
PYTHONPATH⽬录(如果设置了此变量);
标准链接库⽬录;
任何.pth⽂件的内容(如果存在.pth⽂件)
这四个组件组合起来即为所包含的路径,⽽python会选择在搜索路径中的第⼀个符合导⼊⽂件名的⽂件
python中的包
如果我们开发了⼀系列的模块给别⼈使⽤,⽽这些模块是有关联性的,如果照前⾯说的,要设置模块搜索路径,然后将这⼀系列的模块放进
去,这样就会很⿇烦,于是就有了包的概念。
包⽤于将⼀组模块归并到⼀个⽬录中,此⽬录即为包,⽬录名即为包名。
包是⼀个有层次的⽂件⽬录结构,它定义了⼀个由模块和⼦包组成的python应⽤程序执⾏环境
基于包,python在执⾏模块导⼊时可以指定模块的导⼊路径,如:1
要使⽤如图所⽰的package1,则py_pkg_mod容器必须要在模块搜索路径中。使⽤以下命令导⼊:1
包导⼊语句的路径内的每个⽬录内都必须有__init__.py⽂件:
__init__.py可包含python代码,但通常为空;
仅⽤于扮演包初始化的挂钩、替⽬录产⽣模块命名空间以及使⽤⽬录导⼊时实现from*⾏为的⾓⾊
发布python模块或程序:
python模块、扩展和应⽤程序可以按以下⼏种形式进⾏打包和发布:
压缩⽂件(使⽤distutils模块):
windows的zip⽂件和类Unix平台的.⽂件
⾃动解包或⾃动安装可执⾏⽂件:
windows中的.exe⽂件
⾃包含的,不要求安装的预备运⾏可执⾏程序:
windows的.exe⽂件、Unix上带有⼀个⼩的脚本前缀的ZIP压缩⽂件、Mac上的.app⽂件等
平台相关的安装程序:
windows上的.msi⽂件、Linux上常见的.rpm、和.deb⽂件等;
pythoneggs:
较流⾏的第三⽅扩展
使⽤distutils发布模块:
distutils模块能够帮助完成模块或程序发布。
"发布"是指⼀个⽂件集合,这些⽂件联合在⼀起可使⽤distutils构建、打包和发布模块
创建好的发布可以⽤于安装,也可上传到PyPI与他⼈共享
创建发布的步骤:
1、将各代码⽂件组织到模块容器中;
2、准备⼀个README或⽂件;
3、⽽后在容器中创建⽂件,格式如下:porttup
tup(
name='testmod',#包名
version='0.0.1',
author='Forgotten',
author_email='chengyujia@',
py_modules=['testmod'],#此包内所有的模块列表,多个模块名之间⽤逗号隔开
url='',#模块可以从哪⾥获取到,此处只是个样例
description='Asimplemodule',#模块的简要描述
)
的常⽤参数:
name:包的名称(必需)
Version:版本号(必需)
author:作者名称
author_email:作者的电⼦邮件地址
maintainer:维护者的名称
maintainer_email:维护者的电⼦邮件地址
url:包的主页
description:包的简短描述
long_description:包的详细描述
download_url:包的下载位置
Classifiers:字符串分类器列表
py_modules:由所有模块名称组成的列表(必需)
此些模块可能位于包的根⽬录下(modulename),也可能位于某⼦包⽬录中(name)
packages:各⼦包名称组成的列表
platforms:适⽤的平台列表
licen:许可证
的参数⼤体分为两类:
元数据信息(name、version等)
包中的内容列表(py_modules、packages等)
4、完成打包:
在要发布的容器⽬录中执⾏"t"命令进⾏源码打包:
sdist可以指定以下格式进⾏打包:--formats=
zip:zip压缩⽂件
gztar:压缩⽂件
bztar:2压缩⽂件
ztar:tar.Z压缩⽂件
tar:tar⽂件
还可以在要发布的容器⽬录中执⾏"t"命令进⾏⼆进制发⾏版打包:
bdist可以指定以下格式进⾏打包:--formats=
gztar:压缩⽂件
ztar:tar.Z⽂件
tar:tar⽂件
zip:zip压缩⽂件
rpm:RPM包⽂件
pkgtool:Solarispkgtool
wininst:windows上能⾃解压的zip格式的包
msi:MicrosoftInstaller
bdist_dump:做成tar、ztar、gztar、zip格式的包
bdist_rpm:做成rpm格式的包
bdist_wininst:做成wininst格式的包
bdist_msi:做成msi格式的包
获取帮助的⽅式:
--help
--help-commands:所有可以使⽤的命令,如build,install
AND--help:获取特定命令的帮助
AND--help-formats:获取特定命令⽀持使⽤的格式
5、安装打包好的模块:
使⽤all命令安装源码打包⽂件
上传到PyPI上的包,可以使⽤pip,easy_install命令来安装
python中安装第三⽅模块包:
使⽤all命令安装模块:有两个阶段(build、install)
如果不执⾏d⽽直接执⾏all,在安装时会⾃动进⾏build操作。
在执⾏d时python会在执⾏这条命令的⽬录下创建⼀个build⽬录。
d:
--build-ba=/path/to/build_dir指定⽬录进⾏build,build的过程将保存⾄指定⽬录下。
build完成后将会在build⽬录下⽣成以下⽬录,⽤以保存即将安装的模块⽂件:
lib:保存纯python语⾔所研发的模块
rm:存放与平台密切相关的、⽆法实现跨平台的、编译好的库⽂件
all:
install的过程仅仅只是将编译好的⽂件复制到指定的模块安装⽬录中。
在未指定安装⽬录时,默认将安装到第三⽅模块安装⽬录中(/python安装⽬录/lib/site-packages)
⾃定义安装路径:
--ur=:安装⾄指定⽤户家⽬录中特定的⽬录下
常⽤于普通⽤户,因为普通⽤户对某些⽬录是没有写权限的
--prefix=:指定python库的安装路径
要对指定⽬录有写权限
--exec-prefix=:⽤于指定与python⽆关的、由其他语⾔实现的、跟平台相关的特定⽂件的安装路径
要对指定⽬录有写权限
深度定制:
--install-purelib=/path/to/python_lib
--install-platlib=/path/to/plat_lib
--install-lib=/path/to/lib
--install-purelib和--install-platlib选项可以⽤--install-lib来替代
若三个选项都指定了,则--install-lib的优先级最⾼
--install-scripts=/path/to/bin指定可执⾏⽂件的安装路径
--install-data:指定数据⽂件的安装路径
--install-headers:指定⽤C写出来的可执⾏程序的头⽂件安装路径
本文发布于:2022-12-29 02:25:28,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/50533.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |