Python 模块

一,可以将代码量较大的程序分割成多个组织的,彼此独立但又能相互交互的代码片段,
这些自我包含的组织的代码段就是模块

二,模块在物理形式上表现为以.py结尾的代码文件
1,一个文件被看做一个独立的模块,一个模块也可以被看做一个文件
2,模块的文件名就是模块的名字加上扩展名.py
3,每个模块都有自己的名称空间

三,Python 允许导入"其它模块以实现代码重用,从而也实现了将独立的代码文件组织成更大的程序系统"
1,Python中,模块也是队形
2,在一个模块的顶层定义的所有变量都在被导入时成为了被导入模块的属性

四,一个Python程序通常包括一个顶层程序文件和其它的模块文件(0个,1个或多个)
1,顶层文件:包含了程序的主要控制流程
2,模块文件:为顶层文件或其它模块提供各种功能性组件
模块首次导入(或重载)时,Python会立即执行模块文件的顶层程序代码(不在函数内的代码),而位于函数主体内的代码知道函数被调用后才会执行。

五,模块是被导入的,但模块也可以导入和使用其它模块,这些模块可以用Python或其它变成语言写成。

六,模块可内含变量,函数以及类类进行其工作,而函数和类可以包含变量和其它元素。

模块
包含 变量
函数 包含 变量
类 包含 变量 方法 包含 变量

七,在导入模块时,只能使用模块名,而不能使用带.py后缀的模块文件名

八,import语句
1,导入指定的整个模块,包括生成一个以模块名命名的名称空间
2,import module1[,module2[,moduleN]]
·建议一个import语句只导入一个模块
3,import module as moduls_alias

九,from-import语句
1,常用于只导入指定模块的部分属性至当前名称空间
2,from module import name1[,name2[,…nameN]]

十,import 和 from -import 是赋值语句
1,import 和 from是可以执行语句,类似于def,因此,它们可以嵌套在if测试中,出现于def中等等。
2,Python 执行到这些语句时才会对其进行解析,这意味着,所有来自模块的属性仅在import语句执行后才能使用

十一,import 和 from 都是隐形赋值语句
1,import 将整个模块对象赋值给一个变量名
2,from 将一个或多个变量名赋值给导入此模块的模块中的同名对象

十二,模块就是名称空间
1,模块的名称空间可以通过属性__dict__或dir(M)获取
·模块属性可通过点好(.)运算符获取,格式为M.attr
2,模块是一个独立的作用域(本地变量就死全局变量)

十三,import语句导入指定的模块时会执行三个步骤
1,找到模块文件
·在指定的路径下搜索模块文件
2,编译成字节码
·文件导入时就会编译,因此,顶层文件的.pyc字节码文件在内部使用后会被丢弃,只有导入的文件才会留下.pyc文件
3,执行模块的代码来创建其所定义的对象
·模块文件中的所有语句会一次执行,从头至尾,而此步骤中任何对变量名的赋值运算,都会产生所得到的模块文件的属性

十四,注意:模块只在第一次导入时才会执行如上步骤;
1,后续的导入操作只不过是提取内存中已加载的模块对象
2,reload()可用于重新加载模块

十五,Python解释器在import模块时必须先找到对应的模块文件
1,程序的主目录
2,PYTHONPATH目录(如果设置了此变量)
3,标准链接库目录
4,任何.pth文件的内容(如果存在.pth文件)

十六,这四个组件组合起来即为sys.path所包含的路径,而Python会选择在搜索路径中的第一个符合导入文件名的文件
1,import sys
sys.path.append(’/pclass’) 指定路径的方法
sys.path (查看指定了多少个路径)

Python 2.x才能直接使用reload()

Python 包

一,包用于将一组模块归并到一个目录中,此目录即为包,目录名即为包名
1,包是一个有层次的文件目录结构,它定义了一个由模块和子包组成的Python引用程序执行环境
2,基于包,Ptyhon在执行模块导入时可以指定模块的导入路径
import dir1.dir2.mod1

二,要使用如图所示的package1,则py_pkg_mod容器必须要在模块搜索路径中
import package1.mod1

三,包导入语句的路径内的每个目录内都必须有__Init__.py文件
1,init.py可包含python代码,但通常为空,仅用于扮演包初始化的挂钩,替目录产生模块命名空间以及使用目录导入时实现from * 行为的角色

包路径,包路径需要通过sys.path.append(‘路径’)。然后在其路径下创建一个字目录,然后在子目录下创建vim init.py init.py是空文件。然后在当前子目录(包名)下创建模块名就可以了!!
然后导入包:
import 包名.模块名
导入完成后,在当前目录(包名)下,会产生一个__init__.pyc 的文件夹,因为程序以后直接会读取__init__.pyc内部的模块!

模块的顶层执行及被导入

一,一个模块文件可以同时支持顶层执行(作为顶层文件)或被导入(作为模块文件)
1,每个模块都有个名为__name__的内置属性,Python会自动设置该属性
·如果文件是以顶层程序文件执行,在启动时,__name__的值为"main"
·如果是被导入,则__name__的值为模块名
2,可以在模块文件中检测自己的__name__属性,以之实现在执行时运行指定的代码
3,常用于模块的自我测试

发布Python模块或程序

一,Python模块,扩展和应用程序可以按一下几种形式进行打包和发布
1,压缩文件(使用distutils)
·Windows的zip文件和类Unix平台的.tar.gz文件
2,自动解包或自动安装可执行文件
·Windows中的.exe文件
3,自包含的,不要求安装的预备运行可执行程序
·Windows的.exe文件,Unix上带有一个小的脚本前缀的ZIP压缩文件,
Mac上的.app文件等
4,平台相关的安装程序
·Windows上的.msi文件,linux上常见的.rpm,src.rpm和.deb文件等
5,Python eggs
·较流行的第三方扩展

使用disutils发布模块
一,distutils模块能够帮助完成模块或程序发布
1,"发布"是指一个文件集合,这些文件联合在一起可使用distutils构建,打包和发布模块
2,创建好的发布可以用于安装,也可上传到PyPI与他人共享

二,创建发布
1,将各代码文件组织到模块容器中
2,准备一个readme或readme.txt文件
3,而后在容器中创建setup.py文件

使用disutils发布模块

一,distutils模块能够帮助完成模块或程序发布
1,"发布"是指一个文件集合,这些文件联合在一起可使用distutils构建,打包和发布模块
2,创建好的发布可以用于安装,也可上传到PyPi与他人共享

二,创建发布
1,将各代码文件组织到模块容器中
2,准备一个Readme或Readme.txt文件
3,而后在容器中创建setup.py文件
from distutils.core import setup

setup(
name = ‘testmod’,
version = ‘0.0.1’,
author = ‘MageEdu’,
author_email = ‘linuxedu@foxmail.com’,
py_modules = [‘testmod’],
url = ‘http://www.magedu.com’,
description = ‘A simple module.’,
)

参数: 描述:
name 包的名称(必需)
Version 版本号(必需)
author 作者名称
author_email 作者的电子邮件地址
maintainer 维护者的名称
maintainer_email 维护者的电子邮件地址
url 包的主页
description 包的简短描述
long_description 包的详细描述
download_url 包的下载位置
classifiers 字符串分类器列表

setup.py 中setup()中可用的参数:
platforms:平台列表
license:许可证
py_modules:各模块名称组成的列表,此模块可能位于包的根目录下(modname),也可能位于某子包目录中(subpkg1.modname):
packages:各子包名称的列表

大体分为两类:元数据信息和包中的内容列表

打包格式:Python setup.py sdist
可以sdist指定格式:
zip:zip file
gztar:tar.gz file
bztar:tar.bz2 file
ztar:tar.Z file
tar:tar file

python setup.py sdist

  要以为bdist指定的格式:
      gztar:tar.gz file
      ztar:tar.Z file
      tar:tar file
      rpm:RPM Package
      pkgtool:Solaris pkgtool
      wininst:Windows上自解压的zip格式的包
      msi:Microsoft Installer

  bdist_dump:
  bdist_rpm:
  bdist_wininst:
  bdist_msi:

运行打包命令:
打包目录:需要是模块指定的目录,且该目录下有空的README文件:touch README
然后用vim 创建一个 setup.py 的文件
#vim setup.py
#!/usr/bin/pythonX
如同setup (name = …
…,
)

[root@Myslave pak1]# python3 setup.py sdist
running sdist
running check
warning: sdist: manifest template ‘MANIFEST.in’ does not exist (using default file list)

writing manifest file ‘MANIFEST’
creating pak1-0.1
making hard links in pak1-0.1…
hard linking README -> pak1-0.1
hard linking car1.py -> pak1-0.1
hard linking setup.py -> pak1-0.1
creating dist
Creating tar archive
removing ‘pak1-0.1’ (and everything under it)
目录下会有一个dist目录

其打包的默认格式为: tar.gz]

获取帮助的方式:
python setup.py --help
python setup.py --help-commands:所有可以使用的命令,如build,install
python setup.py command --help:获取特定命令的帮助
python setup.py command --help-formats:获取特定命令支持使用的格式

pip ,esay_install

PYTHon安装包(模块):
Python setup.py install:
build and install:
python setup build:
–build-base=/path/to/build_dir

第三方模块的默认安装路径通常为:site-packages(站点包)
/usr/local/python3/lib/python3/site-packages

自定义安装路径:
–user =
–prefix =
–exec-prefix =

深度定制:
–install-purelib = /path/to/python_lib
–install-platlib = /path/to/plat_lib
–install-lib = /path/to/lib

–install-script = /path/to/bin
可执行文件的安装路径
–install-data =
–install-headers =

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值