- 译者序
- 前言
- 第1章 问答环节
- 第2章 Python 如何运行程序
- 第3章 如何运行程序
- 第4章 介绍 Python 对象类型
- 第5章 数字
- 第6章 动态类型简介
- 第7章 字符串
- 第8章 列表与字典
- 第9章 元组、文件及其他
- 第10章 Python 语句简介
- 第11章 赋值、表达式和打印
- 第12章 if 测试和语法规则
- 第13章 while 和 for 循环
- 第14章 迭代器和解析,第一部分
- 第15章 文档
- 第16章 函数基础
- 第17章 作用域
- 第18章 参数
- 第19章 函数的高级话题
- 第20章 迭代和解析,第二部分
- 第21章 模块:宏伟蓝图
- 第22章 模块代码编写基础
- 第23章 模块包
- 第24章 高级模块话题
- 第25章 OOP:宏伟蓝图
- 第27章 更多实例
- 第28章 类代码编写细节
- 第29章 运算符重载
- 第30章 类的设计
- 第31章 类的高级主题
- 第32章 异常基础
- 第34章 异常对象
- 第35章 异常的设计
- 第36章 Unicode 和字节字符串
- 字符串基础知识
- Python 的字符串类型
- 文本和二进制文件
- Python 3.0 中的字符串应用
- 转换
- 编码 Unicode 字符串
- 编码非ASCII文本
- 编码和解码非ASCII文本
- 其他 Unicode 编码技术
- 转换编码
- 在 Python 2.6 中编码 Unicode 字符串
- 源文件字符集编码声明
- 使用 Python 3.0 Bytes 对象
- 序列操作
- 创建 bytes 对象的其他方式
- 混合字符串类型
- 使用 Python 3.0(和 Python 2.6)bytearray 对象
- 使用文本文件和二进制文件
- Python 3.0 中的文本和二进制模式
- 类型和内容错误匹配
- 使用 Unicode 文件
- 在 Python 3.0 中处理 BOM
- Python 2.6 中的 Unicode 文件
- Python 3.0 中其他字符串工具的变化
- Struct二进制数据模块
- pickle对象序列化模块
- XML解析工具
- 本章小结
- 本章习题
- 习题解答
- 第37章 管理属性
- 第38章 装饰器
- 第39章 元类
- 附录A 安装和配置
- 附录B 各部分练习题的解答
- 作者介绍
- 封面介绍
模块搜索路径
在大多数情况下,可以依赖模块导入搜索路径的自动特性,完全不需要配置这些路径。不过,如果你想在用户间定义目录边界来导入文件,就需要知道搜索路径是如何运作的,并予以调整。概括地讲,Python的模块搜索路径是这些主要组件组合而成的结果。其中有些进行了预先定义,而其中有些你可以进行调整来告诉Python去哪里搜索。
1.程序的主目录。
2.PYTHONPATH目录(如果已经进行了设置)。
3.标准链接库目录。
4.任何.pth文件的内容(如果存在的话)。
最后,这四个组件组合起来就变成了sys.path,它是下一部分详细介绍的目录名称字符串的列表。搜索路径的第一和第三元素是自动定义的,但是因为Python会从头到尾搜索这些组件组合的结果,第二和第四元素,就可以用于拓展路径,从而包含你自己的源代码目录。以下是Python使用路径组件的方式。
主目录
Python首先会在主目录内搜索导入的文件。这一入口的含义与你如何运行代码相关。当你运行一个程序的时候,这个入口是包含程序的顶层脚本文件的目录。当在交互模式下工作时,这一入口就是你当前工作的目录。
因为这个目录总是先被搜索,如果程序完全位于单一目录,所有导入都会自动工作,而并不需要配置路径。另一方面,由于这个目录是先搜索的,其文件也将覆盖路径上的其他目录中具有同样名称的模块。如果你需要在自己的程序中使用库模块的话,小心不要以这种方式意外地隐藏库模块。
PYTHONPATH目录
之后,Python会从左至右(假设你的设置了的话)搜索PYTHONPATH环境变量设置中罗列出的所有目录。简而言之,PYTHONPATH是设置包含Python程序文件的目录的列表,这些目录可以是用户定义的或平台特定的目录名。你可以把想导入的目录都加进来,而Python会使用你的设置来扩展模块搜索的路径。
因为Python会先搜索主目录,当导入的文件跨目录时,这个设置才显得格外重要。也就是说,如果你需要被导入的文件与进行导入的文件处在不同目录时。一旦你开始编写大量程序时,你可能想要设置PYTHONPATH变量,但是刚开始编写时,只要把所有模块文件放在交互模式所使用的目录下就行了(也就是说,主目录),如此一来,导入都可运作,而你不需要去担心如何进行这个设置。
标准库目录
接着,Python会自动搜索标准库模块安装在机器上的那些目录。因为这些一定会被搜索,通常是不需要添加到PYTHONPATH之中或包含到路径文件(接下来介绍)中的。
.pth文件目录
最后,Python有个相当新的功能,允许用户把有效的目录添加到模块搜索路径中去,也就是在后缀名为.pth(路径的意思)的文本文件中一行一行地列出目录。这些路径配置文件是和安装相关的高级功能,我们不会在这里进行全面的讨论,但它们提供了PYTHONPATH设置的一种替代方案。
简而言之,当内含目录名称的文本文件放在适当目录中时,也可以概括地扮演与PYTHONPATH环境变量设置相同的角色。例如,如果你在运行Windows和Python 3.0,一个名为myconfig.pth的文件可以放在Python安装目录的顶层(C:\Python30)或者在标准库所在位置的sitepackages子目录中(C:\Python30\Lib\sitepackages),来扩展模块搜索路径。在类似Unix的系统中,文件可能位于usr/local/lib/python3.0/site-packages或/usr/local/lib/site-python中。
当存在目录的时候,Python会把文件每行所罗列的目录从头至尾加到模块搜索路径列表的最后。实际上,Python将收集它所找到的所有路径文件中的目录名,并且过滤掉任何重复的和不存在的目录。因为这些是文件,而不是shell设置值,路径文件可以适用于所安装系统的所有用户,而并非仅限于一个用户或者一个shell。此外,某些用户文本文件可能比环境设置更容易编码。
这个特性比这里介绍的更为复杂。相关细节,可参考Python标准库手册,尤其是标准库模块网站的说明文档。这个模块允许配置Python库和路径文件的位置,并且其文档描述了一般的期待位置。建议初学者使用PYTHONPATH或单个的.pth文件,并且只有进行跨目录的导入时才使用。路径文件作为第三方库经常使用,它通常在Python的site-packages目录安装一个路径文件,从而不需要用户设置(本章随后将介绍Python的distutils安装系统,自动化了很多安装步骤)。
配置搜索路径
所有这些的直接效果是,搜索路径的PYTHONPATH和路径文件部分允许我们调整导入查找文件的地方。设置环境变量的方法以及存储路径文件的位置,随着每种平台而变化。例如,在Windows上,我们可能使用控制面板的系统图标来把PYTHONPATH设置为分号隔开的一串目录:
或者,可以创建一个名为C:\Python30\pydirs.pth的文本文件,其内容如下所示:
这些设置在其他平台上也是类似的,但是细节可能有很大变化,无法在本章中一一介绍。参考附录A有关PYTHONPATH或.pth文件在各种平台上扩展模块搜索路径的常见方式。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论