注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zorksylar

Nothing is impossible , if distributed.

 
 
 

日志

 
 

【Python】module和package学习  

2012-02-19 15:42:26|  分类: python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
参考资料:http://docs.python.org/tutorial/modules.html

Module的寻找路径
当import一个module之后,python的解释器寻找这个module按照如下优先顺序:
1.寻找是否是built-in module。
2.从sys.path的路径中寻找这个module名字.py的文件
    sys.path中寻找module的优先顺序:
    1)当前路径
    2)PYTHONPATH中的目录
    3)Python安装目录(/usr/local/lib/python)

关于PYTHONPATH的补充,要想在python脚本中添加PYTHONPATH的内容,可以如下:

import sys

sys.path.append("add_path") #add_path can be relative path and absolute path

import一个package的时候也是按照上面的顺序找的,
当你import出现error的时候,想到这点。
推荐看一下《learing python 3rd》chap 20,P416,Package _ _init_ _.py Files

Package
Package可以看作是一种组织Module的一种方式,module的集合
Packages are a way of structuring Python’s module namespace by using “dotted module names”. For example, the module name A.B designates a submodule named B in a package named A.

规定package必须包含一个__init__.py文件,如下一个package的目录结构

sound/ Top-level package
__init__.py Initialize the sound package
formats/ Subpackage for file format conversions
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
...
filters/ Subpackage for filters
__init__.py
equalizer.py
vocoder.py
karaoke.py
...

使用的时候:

import sound.effects.echo

...

sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

或者:

from sound.effects import echo

...

echo.echofilter(input, output, delay=0.7, atten=4)

或者:

from sound.effects.echo import echofilter

...

echofilter(input, output, delay=0.7, atten=4)

__init__.py内容可以为空,但是只要这个文件存在,就表明这个目录当作一个package处理
如果希望调用同一个package中的module,则直接import即可。
也就是说,在echo.py中,可以直接使用 import reverse
从surround 中可以:

from . import echo
from .. import formats
from ..filters import equalizer

Note that both explicit and implicit relative imports are based on the name of the current module. Since the name of the main module is always "__main__", modules intended for use as the main module of a Python application should always use absolute imports.

注意:相对导入是以当前模块名称为基础的。因为主模块的名称总是 "__main__" ,所以 Python 程序中打算用作主模块的模块必须使用绝对导入。

当以'*'导入时(from package import *),package内的module受__init__.py影响
__init__.py文件中
__all__ = ['module_1', 'module_2‘ ]表示import * 时,仅导入module_1 和 module_2
  评论这张
 
阅读(501)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018