python3进阶之模块(七)
模块介绍
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
说的通俗点:模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块
import
在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。
形如:
    import module1,mudule2...
  
 - 1
 
 import math 
 #这样才能正确输出结果
 print (math.sqrt(2))
  
 - 1
 - 2
 - 3
 
from…import
Python的from语句让你从模块中导入一个指定的部分到当前命名空间中
语法如下:
from modname import name1[, name2[, ... nameN]]
  
 - 1
 
例如,要导入模块fib的fibonacci函数,使用如下语句:
from fib import fibonacci
  
 - 1
 
注意
 不会把整个fib模块导入到当前的命名空间中,它只会将fib里的fibonacci单个引入
from … import *
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:
from modname import *
  
 - 1
 
注意
 这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。
as
__name__属性
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。
#!/usr/bin/python3
# Filename: using_name.py
if __name__ == '__main__':
   print('程序自身在运行')
else:
   print('我来自另一模块')`
  
 - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 
dir() 函数
内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回:
import sys
path = dir(sys) 
print(path);
  
 - 1
 - 2
 - 3
 - 4
 
模块制作
可以根据__name__变量的结果能够判断出,是直接执行的python脚本还是被引入执行的,从而能够有选择性的执行测试代码
 main.py
import hello
hello.fuck();
  
 - 1
 - 2
 
import sys
def fuck():
    path = dir(sys) 
    print(path);
  
 - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 
使用__name__
import hello
hello.fuck();
hello.fuck();
  
 - 1
 - 2
 - 3
 - 4
 
import sys
def fuck():
    path = dir(sys) 
    print(path);
if __name__ ==  'main':
   print('程序自身在运行')
else:
   print('我来自另一模块')
  
 - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 9
 - 10
 
模块中有__all__
如果一个文件中有__all__变量,那么也就意味着这个变量中的元素,不会被from xxx import *时导入
python中的包
- 1.1 有2个模块功能有些联系
 - 1.2 所以将其放到同一个文件夹下
 - 1.3 使用import 文件.模块 的方式导入
 - 1.4 使用from 文件夹 import 模块 的方式导入
 - 1.5 在msg文件夹下创建__init__.py文件
 - 1.6 在__init__.py文件中写入
 
__all__ = ["sendmsg","recvmsg"]
  
 - 1
 
- 1.7 重新使用from 文件夹 import 模块 的方式导入
 
总结:
 包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包
 有效避免模块名称冲突问题,让应用组织结构更加清晰
-  
  
- init.py文件有什么用
init.py 控制着包的导入行为 
 - init.py文件有什么用
 -  
2.1 init.py为空
仅仅是把这个包导入,不会导入包中的模块 -  
2.2 all
在__init__.py文件中,定义一个__all__变量,它控制着 from 包名 import *时导入的模块 -  
2.3 (了解)可以在__init__.py文件中编写内容
可以在这个文件中编写语句,当导入时,这些语句就会被执行 


 init.py文件
- 扩展:嵌套的包
假定我们的包的例子有如下的目录结构: 

 Phone 是最顶层的包,Voicedta 等是它的子包。 我们可以这样导入子包:
import Phone.Mobile.Analog
Phone.Mobile.Analog.dial()
  
 - 1
 - 2
 
你也可使用 from-import 实现不同需求的导入
第一种方法是只导入顶层的子包,然后使用属性/点操作符向下引用子包树:
from Phone import Mobile
Mobile.Analog.dial('555-1212')
  
 - 1
 - 2
 
此外,我们可以还引用更多的子包:
from Phone.Mobile import Analog
Analog.dial('555-1212')
  
 - 1
 - 2
 
事实上,你可以一直沿子包的树状结构导入:
from Phone.Mobile.Analog import dial
dial('555-1212')
  
 - 1
 - 2
 
在我们上边的目录结构中,我们可以发现很多的 init.py 文件。这些是初始化模块,from-import 语句导入子包时需要用到它。 如果没有用到,他们可以是空文件。
包同样支持 from-import all 语句:
from package.module import *
  
 - 1
 
然而,这样的语句会导入哪些文件取决于操作系统的文件系统。所以我们在__init__.py 中加入 all 变量。该变量包含执行这样的语句时应该导入的模块的名字。它由一个模块名字符串列表组成.。
模块发布
模块发布
 模块发布
- 1.mymodule目录结构体如下:
 
├── setup.py
├── suba
│   ├── aa.py
│   ├── bb.py
│   └── __init__.py
└── subb
    ├── cc.py
    ├── dd.py
    └── __init__.py
  
 - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 9
 
2.编辑setup.py文件
py_modules需指明所需包含的py文件
from distutils.core import setup
setup(name="dongGe", version="1.0", description="dongGe's module", author="dongGe", py_modules=['suba.aa', 'suba.bb', 'subb.cc', 'subb.dd'])
  
 - 1
 - 2
 - 3
 
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
  
 - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 9
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 
4.生成发布压缩包
python setup.py sdist
打包后,生成最终发布压缩包dongGe-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
│   └── dongGe-1.0.tar.gz
├── MANIFEST
├── setup.py
├── suba
│   ├── aa.py
│   ├── bb.py
│   └── __init__.py
└── subb
    ├── cc.py
    ├── dd.py
    └── __init__.py
  
 - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 9
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 
模块安装、使用
- 1.安装的方式
找到模块的压缩包
解压
进入文件夹
执行命令python setup.py install
注意: 
如果在install的时候,执行目录安装,可以使用python setup.py install --prefix=安装路径
- 2.模块的引入
在程序中,使用from import 即可完成对安装的模块使用 
from 模块名 import 模块名或者*
文章来源: yujiang.blog.csdn.net,作者:鱼酱2333,版权归原作者所有,如需转载,请联系作者。
原文链接:yujiang.blog.csdn.net/article/details/89365384
- 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)