例子1:
一 实例和结果
PyPackage
│ PyCommonM.py
│ __init__.py
│
├─p1Package
│ P1M.py
│ P1MC.py
│ __init__.py
│
└─p2
P2.py
P2M.py
2) PyCommonM.py
def PyCommonMF(): print "PyCommonMF"
3) P1M.py:
def P1MF(): print 'P1MF'
4) P1MC.py:
class P1MC():
@staticmethod
def P1MCF(): print 'P1MCF'
5)P2M.py:
def P2MF(): print 'P2MF'
6) P2.py:
import P2M
from PyPackage import PyCommonM
from PyPackage.p1Package import P1M
from PyPackage.p1Package.P1MC import P1MC
def P2F():
print 'P2F'
if __name__ == '__main__':
P2F()
P2M.P2MF()
P1M.P1MF()
P1MC.P1MCF()
PyCommonM.PyCommonMF()
7) 运行p2.py的结果:
P2F
P2MF
P1MF
P1MCF
PyCommonMF
二 解释
* 一个py文件为一个module,例如module: PyCommonM.py,P2M.py,P1MC.py, P1M.py 。
* 包含__init__.py的文件夹为一个package,例如package: PyPackage,p1Package。
* 可以直接使用import来引用相同目录下的其他的module, 例如p2.py中的import P2M。
* 通过from import来引用其他的目录下且属于某个package的module,例如py.py中的from PyPackage import PyCommonM 和 from PyPackage.p1Package import P1M。
* 通过from import来引用某个module中的类,例如from PyPackage.p1Package.P1MC import P1MC
注意package所在的目录必须在pythonpath环境变量中。
转载来源:http://www.cnblogs.com/itech/archive/2011/04/26/2029587.html
例子2:
package目录下有module1.py, module2.py, __init__.py
module1.py内容如下:
def func1():
print("func1 function")
module2.py内容如下:
def func2(par):
print ("func2 function")
return
__init__.py内容如下:
from module1 import func1
from module2 import func2
与package文件夹在同一目录下的文件test.py,内容如下:
import package
package.func1()
package.func2('test func2')
输出结果如下:
func1 function
func2 function
注:要把package目录路径放置在PYTHONPATH环境变量中
参考:http://www.w3cschool.cc/python/python-modules.html
1 模块(Module)和包(Package)
1.1 命名空间(Namespace)
由于在Python中一切皆为对象(Object), 想要好好理解Module和Package,一定要先理解Namespace的概念。 所谓Namespace,是指标示符的可见范围。对于Python而言,常见的Namespace主要有以下几种:
- Build-in Namespace (内建命名空间)
- Global Namespace (全局命名空间)
- Local Namespace (局部命名空间)
有了命名空间的概念,可以有效的解决函数或者是变量重名的问题。不同的命名空间中允许出现相同的函数名或者 是变量名。它们彼此之间不会相互影响,例如在Namespace A和B中同时有一个名为var的变量,对A.var赋值并不 会改变B.var的值。
1.2 模块(Module)
Python中的一个Module对应的就是一个.py文件。其中定义的所有函数或者是变量都属于这个Module。这个Module 对于所有函数而言就相当于一个全局的命名空间。而每个函数又都有自己局部的命名空间。
# test.py
'''
This is only a test module
'''
age = 0
def printHello():
print "Hello, world!"
if __name__ == '__main__':
printHello()
我们可这样来使用这个module, 用t来作为test的别名
import test as t
>>> t.age
0
>>> t.age = 1
1
>>> t.printHello()
Hello, world!
>>> print t.__doc__
This is only a test module
当然,我们也可以这样来使用:
>>> form test import *
>>> age
0
>>> printHello()
你一定有注意到'__main__'的条件判断,由于每一个module都有__name__的属性,只有当直接运行 这个module的时候,__name__属性才会等于__main__。当它被import的时候,你可以完全当它不存在。
1.3 包(Package)
所谓Package, 就是一堆module的集合,也就一堆.py文件。 你可以用如下方式来创建一个package
- 新建一个folder名为test
- 在test文件夹下新建一个空的__init__.py文件。
- 在test文件夹下新建下py文件,名为a.py
# a.py
def sayHello():
print "Hello, world!"
>>> import test.a as t
>>> t.sayHello()
Hello, world!
Package 提供了一种很好的管理module的方式,可以有效的减少module的命名conflict,保持较好的树型结构。
转载来源:http://blog.csdn.net/huangkangying/article/details/32348665#t0
python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。下面将具体介绍几种常用情况:
(1)主程序与模块程序在同一目录下:
如下面程序结构:
`-- src
|-- mod1.py
`-- test1.py
若在程序test1.py中导入模块mod1, 则直接使用import mod1或from mod1 import *;
(2)主程序所在目录是模块所在目录的父(或祖辈)目录
如下面程序结构:
`-- src
|-- mod1.py
|-- mod2
| `-- mod2.py
`-- test1.py
若在程序test1.py中导入模块mod2, 需要在mod2文件夹中建立空文件__init__.py文件(也可以在该文件中自定义输出模块接口); 然后使用 from mod2.mod2 import * 或import mod2.mod2.
(3)主程序导入上层目录中模块或其他目录(平级)下的模块
如下面程序结构:
`-- src
|-- mod1.py
|-- mod2
| `-- mod2.py
|-- sub
| `-- test2.py
`-- test1.py
若在程序test2.py中导入模块mod1和mod2。首先需要在mod2下建立__init__.py文件(同(2)),src下不必建立该文件。然后调用方式如下:
下面程序执行方式均在程序文件所在目录下执行,如test2.py是在cd sub;之后执行python test2.py
而test1.py是在cd src;之后执行python test1.py; 不保证在src目录下执行python sub/test2.py成功。
import sys
sys.path.append("..")
import mod1
import mod2.mod2
(4)从(3)可以看出,导入模块关键是能够根据sys.path环境变量的值,找到具体模块的路径。这里仅介绍上面三种简单情况。
原文地址:http://hi.chinaunix.net/?253639/viewspace-25422