栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

导入模块时,它将首先在缓存中查找(即

sys.modules
),如果尚未在其中,
sys.meta_path
则使用from中的查找器。通常,
sys.meta_path
Builtinimporter
Frozenimporter
和组成
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    bytepre = SourcelessFileLoader, BYTECODE_SUFFIXES    return [extensions, source, bytepre]

可以看到:

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

显然,

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

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/668517.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号