返回介绍

模块搜索路径

发布于 2024-01-29 22:24:16 字数 2581 浏览 0 评论 0 收藏 0

正如前面所提到的,通常对程序员来说,导入过程的最重要的部分是最早的部分,也就是定位要导入的文件(搜索部分)。因为我们需要告诉Python到何处去找到要导入的文件,我们需要知道如何输入其搜索路径以扩展它。

在大多数情况下,可以依赖模块导入搜索路径的自动特性,完全不需要配置这些路径。不过,如果你想在用户间定义目录边界来导入文件,就需要知道搜索路径是如何运作的,并予以调整。概括地讲,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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文