模块:导入的两种方式
不加__all__的情况:
加__all__的情况:
·总结:如果一个文件中有__all__变量,from xxx import *时导入时,__all__['a','b']中括号里面的可以使用,其他的不能使用。
1.1python中的包
所以将其放到同一个文件夹下
使用import文件.模块 的方式导入
使用from文件夹import模块 的方式导入
在msg文件夹下创建__init__.py文件
在__init__.py文件中写入
重新使用from文件夹import模块 的方式导入
总结:
·包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py文件,那么这个文件夹就称之为包。
有效避免模块名称冲突问题,让应用组织结构更加清晰
1.1.1__init__.py文件有什么用
__init__.py控制着包的导入行为
1.1.1.1__init__.py为空
仅仅是把这个包导入,不会导入包中的模块
1.1.1.2__all__
在__init__.py文件中,定义一个__all__变量,它控制着from包名import *时导入的模块。
__all__里面的可以导入,其他的导入不进去,相当于一种导入的过滤。
1.1.1.1以在__init__.py文件中编写内容(导入会被自动调用)
可以在这个文件中编写语句,当导入时,这些语句就会被执行
__init__.py文件
1.1.1扩展:嵌套的包
假定我们的包的例子有如下的目录结构:
Phone/
__init__.py
common_util.py
Voicedta/
__init__.py
Pots.py
Isdn.py
Fax/
__init__.py
G3.py
Mobile/
__init__.py
Analog.py
igital.py
Pager/
__init__.py
Numeric.py
Phone是最顶层的包,Voicedta等是它的子包。 我们可以这样导入子包:
import Phone.Mobile.Analog
Phone.Mobile.Analog.dial()
你也可使用from-import实现不同需求的导入
第一种方法是只导入顶层的子包,然后使用属性/点操作符向下引用子包树:
from Phone import Mobile
Mobile.Analog.dial('555-1212')
此外,我们可以还引用更多的子包:
from Phone.Mobile import Analog
Analog.dial('555-1212')
事实上,你可以一直沿子包的树状结构导入:
from Phone.Mobile.Analog import dial
dial('555-1212')
在我们上边的目录结构中,我们可以发现很多的__init__.py文件。这些是初始化模块,from-import语句导入子包时需要用到它。 如果没有用到,他们可以是空文件。
包同样支持from-import all语句:
from package.module import *
然而,这样的语句会导入哪些文件取决于操作系统的文件系统。所以我们在__init__.py中加入__all__变量。该变量包含执行这样的语句时应该导入的模块的名字。它由一个模块名字符串列表组成.。
1.1模块发布
1.mymodule目录结构体如下:
.
├── setup.py
├── suba
│ ├── aa.py
│ ├── bb.py
│ └── __init__.py
└── subb
├── cc.py
├── dd.py
└── __init__.py
2.编辑setup.py文件
py_modules需指明所需包含的py文件
fromdistutils.coreimportsetup
setup(name="yongGe", version="1.0", description="yongGe's module", author="yongGe", py_modules=['suba.aa','suba.bb','subb.cc','subb.dd'])
3.构建模块
python setup.py build
构建后目录结构
├── build
│ └── lib.linux-i686-2.7
│ ├── suba
│ │ ├── aa.py
│ │ ├── bb.py
│ │ └── __init__.py
│ └── subb
│ ├── cc.py
│ ├── dd.py
│ └── __init__.py
├── setup.py
├── suba
│ ├── aa.py
│ ├── bb.py
│ └── __init__.py
└── subb
├── cc.py
├── dd.py
└── __init__.py
4.生成发布压缩包
python setup.py sdist
打包后,生成最终发布压缩包yongGe-1.0.tar.gz ,目录结构
├── build
│ └── lib.linux-i686-2.7
│ ├── suba
│ │ ├── aa.py
│ │ ├── bb.py
│ │ └── __init__.py
│ └── subb
│ ├── cc.py
│ ├── dd.py
│ └── __init__.py
├── dist
│ └── yongGe-1.0.tar.gz
├── MANIFEST
├── setup.py
├── suba
│ ├── aa.py
│ ├── bb.py
│ └── __init__.py
└── subb
├── cc.py
├── dd.py
└── __init__.py
1.2模块安装、使用
1.2.0.1安装的方式
1.找到模块的压缩包
2.解压
3.进入文件夹
4.执行命令python setup.py install
注意:如果在install的时候,执行目录安装,可以使用python setup.py install --prefix=安装路径
·如果在install的时候,要安装细节都写到log里了,可以使用python setup.py install --record=日志文件的名字。如果删除cat log|xagrs rm-rf。也可以通过rm命令删除。
1.2.0.2模块的引入
在程序中,使用from import即可完成对安装的模块使用