day23模块

模块:导入的两种方式

day23模块_第1张图片
day23模块_第2张图片
day23模块_第3张图片
day23模块_第4张图片
day23模块_第5张图片

不加__all__的情况:

day23模块_第6张图片
day23模块_第7张图片
day23模块_第8张图片

加__all__的情况:

day23模块_第9张图片
day23模块_第10张图片

·总结:如果一个文件中有__all__变量,from xxx import *时导入时,__all__['a','b']中括号里面的可以使用,其他的不能使用。

1.1python中的包


所以将其放到同一个文件夹下

day23模块_第11张图片

使用import文件.模块 的方式导入


day23模块_第12张图片

使用from文件夹import模块 的方式导入

day23模块_第13张图片

在msg文件夹下创建__init__.py文件

day23模块_第14张图片

在__init__.py文件中写入

重新使用from文件夹import模块 的方式导入

day23模块_第15张图片

总结:

·包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__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文件


day23模块_第16张图片
day23模块_第17张图片

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即可完成对安装的模块使用

from模块名import模块名或者*

你可能感兴趣的:(day23模块)