Python自定义包使用方法_第1页
Python自定义包使用方法_第2页
Python自定义包使用方法_第3页
Python自定义包使用方法_第4页
Python自定义包使用方法_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Python自定义包使用方法1.介绍python中的Module是比较重要的概念,每个py可以看成一个module。常见的情况是,事先写好一个.py文件,在另一个文件中需要import时,将事先写好的.py文件拷贝到当前目录,或者是在sys.path中增加事先写好的.py文件所在的目录,然后import。如果将相关的py文件放到一个目录下然后在加上一个_init_.py文件,就构成了一个包。在每一个包中,都有一个_init_.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中也有_init_.py那么它就是这个包的子包了。当你将一个包作为模块导入(比如从xml导入

2、dom)的时候,实际上导入了它的_init_.py文件。一个包是一个带有特殊文件_init_.py的目录。_init_.py文件定义了包的属性和方法。其实它可以什么也不定义;可以只是一个空文件,但是必须存在。python在执行import语句时,它执行了如下操作:第1步,创建一个新的,空的module对象(它可能包含多个module);第2步,把这个module对象插入sys.module中第3步,装载module的代码(如果需要,首先必须编译)第4步,执行新的module中对应的代码。在执行第3步时,首先要找到module程序所在的位置,其原理为:1)当前目录2)环境变量中PYTHONPAT

3、H中指定的路径列表中依次搜索3)python的安装设置相关的默认路径,在Unix下,通常为/user/local/lib/python正因为存在这样的顺序,如果当前路径或PYTHONPATH中存在与标准module同样的module,则会覆盖标准module。也就是说,如果当前目录下存在xml.py,那么执行importxml时,导入的是当前目录下的module,而不是系统标准的xml。2.简单目录结构下模块调用方法如test中调用fun中的sum函数,目录机构如下:1)在同一目录下。直接引用名字即可-maindirfun.pytest.py调用方法:importfunfun.sum()2)不

4、同目录-maindir-subdirfun.pysum.py调用方法1:1)在subdir中创建文件_init_.py(将subdir看成一个包对待)2)在test.py中importsubdir.funsubdir.fun.sum()调用方法2:将subdir目录添加到搜索路径,在test中:#加载到fun所在的目录importsyssys.path.append(subdir)#也可通过添加环境变量的方法,如exportPYTHONPAHT=$PYTHONPATH:/*/maindir/subdir#此后使用等同于同一目录importfunfun.sum()从上例可看出,如果添加fun.p

5、y的路径到模块调用的搜索路径下,那就等同于与其在同一目录下的使用。如上2中的调用方法2。如果搜索路径是fun.py所在的目录,可将其目录添加_init_.py)的方式,看成一个包,通过import目录名.fun的加载方式使用其中函数,如上2中的调用方法13.复杂目录架构下模块调用方法采用sys.path.append加载到文件所在目录的方式,对于少数文件还可,如果目录层次复杂、数目较多时,就会变得吃力。此时就要通过环境变量PYTHONPATH和_init_.py同步使用的方式。如下多级目录:-maindir-dir1-subdir1fun.py-dir2-subdir2test.py调用方法:

6、1)将maindir作为一个主目录,增加到环境变量中,如miandir所在目录为/system_enc/python/maindir,可将subdir1目录添加到环境变量中:exportPYTHONPAHT=$PYTHONPATH:/system_enc/python/maindir此后,加载模块时,可以此开始。(通过os.sys.path查看)2)在需要被调用的模块的所在层级目录中均增加_init_.py文件,到上述所添加的环境变量中的主目录为止。此后编译会将其层目录看做一个包进行处理,查找其下的文件模块。如上,test.py调用fun.py,就需要在fun.py所在的目录subdir1及上

7、级目录dir1都增加_init_.py文件,到主目录maindir为止。-maindir-dir1_init_.py-subdir1_init_.pyfun.py-dir2-subdir2test.py注:上述中1)和2)缺一不可。_init_.py,被动的模块中需要增加,主调函数所在目录中不需要添加。4._init_.py文件内容一个包是一个带有特殊文件_init_.py的目录。_init_.py文件定义了包的属性和方法。其实它可以什么也不定义;可以只是一个空文件,但是必须存在。_init_.py可以为空,只要它存在,就表明此目录应被作为一个package处理。当然,_init_.py中也可

8、以设置相应的内容,下文详细介绍。1.定义一个函数在_init_.py中定义一个函数,可直接通过目录名.函数名来调用。如上3中,在dir1总定义一个demo函数,在test.py中,可通过importdir1dir1.demo()来进行调用-maindir-dir1_init_.py#defdemo():-subdir1_init_.pyfun.py-dir2-subdir2test.py2.导入其他包或模块当我们导入这个包的时候,_init_.py文件自动运行,在其中可以添加导入模块的命令,这样我们就不需要将所有的import语句写在一个文件里了,也可以减少代码量。不需要一个个去导入modul

9、e了。_init_.py中还有一个重要的变量,叫做_all_。我们有时会使出一招“全部导入”,也就是这样:fromPackageNameimport*这时import就会把注册在包_init_.py文件中_all_列表中的子模块和子包导入到当前作用域中来。比如:-maindir-dir1_init_.py#_all_=test1,subdir1test1.py-subdir1_init_.py#_all_=fun或importfunfun.py-dir2-subdir2test2.py此时在test1.py中formsubdir1import*#加载了dir1下fun模块fun.sum()#不需要加subdir1层次在test2.py中formdir1import*#加载了dir1下的test1和subdir1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论