返回介绍

模块文件选择

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

记住,文件名的后缀(例如,.py)是刻意从import语句中省略的。Python会选择在搜索路径中第一个符合导入文件名的文件。例如,import b形式的import叙述可能会加载。

·源代码文件b.py。

·字节码文件b.pyc。

·目录b,包导入(在第23章说明)。

·编译扩展模块(通常用C或C++编写),导入时使用动态连接(例如,Linux的b.so以及Cygwin和Windows的b.dll或b.pyd)。

·用C编写的编译好的内置模块,并通过静态连接至Python。

·ZIP文件组件,导入时会自动解压缩。

·内存内映像,对于frozen可执行文件。

·Java类,在Jython版本的Python中。

··NET组件,在IronPython版本的Python中。

C扩展、Jython以及包导入,都不仅仅是简单文件的导入机制的延伸。不过,对导入者来说,完全忽略了需要加载的文件类型之间的差异,无论是在导入时或者是在读取模块的属性时都是这样。例如,import b就是读取模块b,根据模块搜索路径,b是什么就是什么,而b.attr则是取出模块中的一个元素,可能是Python变量或连接的C函数。本书所用的某些标准模块实际上是用C编写的而不是Python。正是因为这种透明度,客户端并不在乎文件是什么。

如果在不同目录中有b.py和b.so,Python总是在由左至右搜索sys.path时,加载模块搜索路径那些目录中最先出现(最左边的)的相符文件。但是,如果是在相同目录中找到b.py和b.so,会发生什么事情呢?在这种情况下,Python遵循一个标准的挑选顺序,不过这种顺序不保证永远保持不变。通常来说,你不应该依赖Python会在给定的目录中选择何种的文件类型:让模块名独特一些,或者设置模块搜索路径,让模块选择的特性更明显一些。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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