百度一下 藏锋者 就能快速找到本站! 每日资讯归档 下载藏锋者到桌面一键访问

当前位置:主页 > 编程 > python > Dive Into Python -- import 的搜索路径

Dive Into Python -- import 的搜索路径

所在栏目:python 时间:12-22 20:58 分享:

在进一步讲解之前,我想简要的说一下库的搜索路径。当你试图导入(import)一个模块的时候,Python 会寻找几个地方。具体来说,它会搜寻在 sys.path 里面定义的所有目录。这只是一个列表,你可以容易地查看它或者使用标准的列表方法去修改它。


>>> import sys                                                 
>>> sys.path                                                   
['', 
 '/usr/lib/python31.zip', 
 '/usr/lib/python3.1',
 '/usr/lib/python3.1/plat-linux2@EXTRAMACHDEPPATH@', 
 '/usr/lib/python3.1/lib-dynload', 
 '/usr/lib/python3.1/dist-packages', 
 '/usr/local/lib/python3.1/dist-packages']
>>> sys                                                        
<module 'sys' (built-in)>
>>> sys.path.insert(0, '/home/mark/diveintopython3/examples')  
>>> sys.path                                                   
['/home/mark/diveintopython3/examples', 
 '', 
 '/usr/lib/python31.zip', 
 '/usr/lib/python3.1', 
 '/usr/lib/python3.1/plat-linux2@EXTRAMACHDEPPATH@', 
 '/usr/lib/python3.1/lib-dynload', 
 '/usr/lib/python3.1/dist-packages', 
 '/usr/local/lib/python3.1/dist-packages']

导入 sys 模块,使它的所有函数和属性可以被使用。
sys.path 是一个目录名称的列表,它构成了当前的搜索路径。(你会看到不一样的结果,这取决于你的操作系统,你正在运行的 Python 的版本,以及它原来被安装的位置。) Python 会从头到尾的浏览这些目录(按照这个顺序),寻找一个和你正要导入的模块名称匹配的 .py 文件。
其实,我说谎了。真实情况比那个更加复杂,因为不是所有的模块都按照 .py 文件来存储。有些,比如 sys 模块,属于内置模块(built-in modules), 他们事实上被置入到 Python 本身里面了。 内置模块使用起来和常规模块一样,但是无法取得它们的 Python 源代码,因为它们不是用 Python 写的!( sys 模块是用 C 语言写的。)
通过添加一个目录名称到 sys.path 里,你可以在运行时添加一个新的目录到 Python 的搜索路径中,然后无论任何时候你想导入一个模块,Python 都会同样的去查找那个目录。只要 Python 在运行,都会一直有效。
通过使用 sys.path.insert(0, new_path),你可以插入一个新的目录到 sys.path 列表的第一项,从而使其出现在 Python 搜索路径的开头。这几乎总是你想要的。万一出现名字冲突(例如,Python 自带了版本 2 的一个特定的库,但是你想使用版本 3),这个方法就能确保你的模块能够被发现和使用,替代 Python 自带的版本。
Dive Into Python -- import 的搜索路径 免费邮件订阅: 邮件订阅

图片推荐

热点排行榜

CopyRight? 2013 www.cangfengzhe.com All rights reserved