1 classA(object):2 def __init__(self,name,age):3 print "A's initing"
4 self.name=name5 self.age=age6 defm_A(self):7 print "m_A:name is %s" %self.name8 print "m_A:age is %d" %self.age9
10 classB(object):11 def __init__(self,name,age):12 print "B's initing"
13 self.name=name14 self.age=age15 defm_B(self):16 print "m_B:name is %s" %self.name17 print "m_B:age is %d" %self.age
现在我们来测试一下导入:
1 importtestIm2 a=testIm.A("anna",18) #输出结果为:A's initing
3 b=testIm.B("jim",21) #输出结果为:B's initing
4 a.m_A() #输出结果为:m_A:name is anna
5 #m_A:age is 18
6 b.m_B() #输出结果为:m_B:name is jim
7 #m_B:age is 21
发现没有报错了。
方法2、将prefix\lib\sit-packages\testImLib加入系统的搜索路径方法如下:
1 importsys
2 sys.path.append('C:\\Python27\\lib\\site-packages\\testImLib')
3 import testImNew
此时也没有报错了。
我们创建单个文件的情况并不能满足我们大部分时候的要求,更多的时候我们需要创建一个子目录,在子目录中组织我们的多个模块。如果我们导入自己创建的目录中的模块,我们就需要另一个文件的的帮忙才能正常导入我们的模块,这个文件及是__init__.py,或者也可以像前面那样,将我们创建的模块所在的路径加入到搜索路径中。如果只是单单在site-packages目录下创建了我们自己的目录,然后导入就会像前面一样报错。
对于添加目录到搜索路径,上面已经写出了方法,下面我说一下使用__init__.py进行导入。
假如在 prefix\lib\sit-packages目录下存在子目录testImLib,子目录包含testIm.py模块,即 有文件prefix\lib\sit-packages\testImLib\testIm.py
我们如果直接导入报错:
import testImLib.testIm #输出结果为: ImportError: No module named testImLib.testIm
在子目录testImLib中引入__init__.py文件。__init__.py文件引入后testImLib就相当于是一个合法的包了。
prefix\lib\sit-packages\testImLib\中包含:__init__.py、testIm.py2个文件。__init__.py文件可以为空,也可以写入我们要的内容。
添加__init__.py文件后我们测试一下:
if __name__=="__main__":from testImLib importtestIm
a=testIm.A("anna",18) #输出结果为:A's initing
到此,顺利解决。
总结一下:
当我们创建了一个模块需要导入时,当此模块文件在系统的搜索路径下,可以直接导入;如果不在,则可以通过她添加模块所在路径到系统的搜索路径中去。
当我们创建了一个包时,一定需要__init__.py文件,这样才是一个合法的包。我们可以直接通过 from *** import ***来导入。或者我们也可以不要__init__.py文件直接将包的路径添加到搜索路径中。
基于目前的水平,可能文章中有错误或者不够清晰的地方,以后再完善。