1、模块
在当前目录下,创建一个m1.py的文件
def say(word):
print word
m1type="555"
在创建一个调用代码call.py
import m1
print __name__
print m1.__name__
m1.say("gg")
print m1.m1type
在命令行中执行python call.py
可以看到m1这个模块中的函数和变量都可以被调用。
2、包
在当前目录下创建一个文件夹p1,
在p1中创建一个空文件(__init__.py)标识这是一个包。
在p1中再创建一个模块m2.py
def say(word):
print word
m1type="44444"
在命令行中执行python call2.py
结果如下:
__main__
p1.m2
gg
44444
可以看到p1.m2这个模块中的函数和变量都可以被调用。
3、包可以包含子包,和java的package相同。
java在运行前可以指定classpath的位置,可以有多个位置
python有一个sys.path变量,和classpath类似。
当引用的包不在主类目录下时,需要先修改sys.path
也可以在site-packages中方一个.pth文件,里面写上要增加的目录
例子:
$ cat packagemain/main.py
#!python
import sys
sys.path.append("f:\\gaofeng\\python\\mypackage")
print sys.path
import package1.module1
import vm.vm, vm.vm2
print "a" "b"
print "a","b"
vm.vm.vm_f1("gaofeng")
vm.vm2.vm_f1("gaofeng")
package1.module1.f1()
运行结果:
$ packagemain/main.py
['F:\\gaofeng\\python\\mypackage\\packagemain', 'D:\\Python27\\lib\\site-package s\\pip-9.0.1-py2.7.egg', 'C:\\Windows\\system32\\python27.zip', 'D:\\Python27\\D LLs', 'D:\\Python27\\lib', 'D:\\Python27\\lib\\plat-win', 'D:\\Python27\\lib\\li b-tk', 'D:\\Python27', 'D:\\Python27\\lib\\site-packages', 'f:\\gaofeng\\python\ \mypackage']
ab
a b
F:\gaofeng\python\mypackage\packagemain\vm\vm.pyc vm_f1 gaofeng
F:\gaofeng\python\mypackage\packagemain\vm\vm2.pyc vm_f1 gaofeng
f:\gaofeng\python\mypackage\package1\module1.pyc
F:\gaofeng\python>tree /f mypackage
├─package1
│ module1.py
│ __init__.py
│
├─package2
└─packagemain
│ main.py
│ __init__.py
│
└─vm
vm.py
vm2.py
__init__.py
4、
autotest/conf/m1.py
class A:
def f1(self):
print("ffff1111")
class B:
def f2(self):
print("ffff222")
import autotest.conf.m1
a = autotest.conf.m1.A() #要带全package路径
a.f1()
from autotest.conf import m1
x = m1.A() #需要模块名
x.f1()
from autotest.conf.m1 import B
b=B() #只需要类名
b.f2()