Python中是否可以保证模块文件名中扩展名的导入顺序?

外汇

通过实验,我验证了当同一目录中同时存在编译的extension.pyd(或.so)和Plain时extension.py.pyd首先导入文件;.py,如果只输入.pyd文件未找到:

In [1]: import extension

In [2]: extension.__file__
Out[2]: 'extension.pyd'

In [3]: import glob; glob.glob("extension.py*")
Out[3]: ['extension.py', 'extension.pyd']

是否保证所有版本的Python都相同,并且我可以依靠它向.py仅在.pyd未找到文件时执行的文件添加逻辑吗?

ad

FWIW,我找不到参考说明,必须在py文件之前加载扩展,因此将其作为实现细节可能更安全(除非有人提供参考)。即使此细节对于所有版本都稳定到至少2.7。

导入模块时,它将首先在缓存中查找(即sys.modules),如果尚未在其中,sys.meta_path则使用from的查找器通常,sys.meta_pathBuiltinImporterFrozenImporter组成PathFinder,其中PathFinder负责在磁盘/ python-path上查找模块。

PathFinder提供了一些缓存功能,以加速查找,但它基本上代表所述搜索sys.path_hooks-概述可以在例如发现PEP 302

通常,sys.path_hooks由组成zipimporter,它使压缩文件的导入成为可能;由包装好的FileFinder,则是整个导入机器的主力。

FileFinder尝试不同的出就足够了(即.so.py.pyc)在给定的顺序,这是通过建立_get_supported_file_loaders()-method

def _get_supported_file_loaders():
    """Returns a list of file-based module loaders.
    Each item is a tuple (loader, suffixes).
    """
    extensions = ExtensionFileLoader, _imp.extension_suffixes()
    source = SourceFileLoader, SOURCE_SUFFIXES
    bytecode = SourcelessFileLoader, BYTECODE_SUFFIXES
    return [extensions, source, bytecode]

可以看到:

  • 扩展名在源文件(即py文件)之前
  • 源文件先于pyc文件

显然,sys.meta_path以及sys.path_hooks可以以某种方式进行操纵,这将建立负载优先级的任意顺序。

作为个人说明:我将尽量避免py和so / pyd文件彼此相邻的情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python:检查扩展名列表中是否存在以扩展名结尾的文件名

在Python中从文件名提取扩展名

在Python中获取不带扩展名的文件名

如何从Python中文件名列表中的文件名中删除扩展名?

从扩展名前的文件名中删除日期

在R中获取不带扩展名的文件名

在Ruby中获取文件名和扩展名

在扩展名中打印文件名

在文件名中获取扩展名

AppleScript中没有扩展名的文件名

如何检查文件名(带有任何扩展名)在Golang目录中是否存在?

如何检测android中是否存在文件名(带有任何扩展名)

从具有多个扩展名的文件名中删除某些扩展名

重命名所有“。” 文件名中扩展名“ _”(扩展名除外)

如何使用 python 的文件扩展名对目录中的文件名进行分组?

如何从Python路径中获取不带扩展名的文件名?

如何从 Python 中的路径获取不带扩展名的文件名?

如何在Python中从文件名替换(或剥离)扩展名?

如何从没有扩展名的路径中获取特定文件名python

在Python中更改文件扩展名

如何从上传的图片中获取文件扩展名,而文件名中没有扩展名

如何在Swift中从文件扩展名中拆分文件名?

在 C++ 中,如果未给出,则在文件名中附加文件扩展名

路径名中的文件名,不包括(未知)扩展名

从相同扩展名但不具有扩展名(MATLAB)的目录中获取文件名

如何下载网址中没有文件名和文件扩展名的文件

.bat文件可根据扩展名,文件名中的空格移动文件

给定文件夹中的文件名,找出对应的文件扩展名

python对扩展名/文件名排序