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

Python共享对象模块的命名约定

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

Python共享对象模块的命名约定

这实际上是依赖于平台的,Python根据操作系统尝试使用不同的后缀。这是后缀表的初始化

import.c

#ifdef HAVE_DYNAMIC_LOADING    memcpy(filetab, _Pyimport_DynLoadFiletab,countD * sizeof(struct filedescr));#endif    memcpy(filetab + countD, _Pyimport_StandardFiletab,countS * sizeof(struct filedescr));    filetab[countD + countS].suffix = NULL;    _Pyimport_Filetab = filetab;

因此它加入了两个列表,

_Pyimport_DynLoadFiletab
_Pyimport_StandardFiletab
。后者比较容易,它被定义为
[".py",".pyw",".pyc"]
在同一文件中(第二个条目仅在Windows上存在)。
_Pyimport_DynLoadFiletab
在各种
dynload_<platform>.c
文件中定义。在基于Unix的系统上,其值是
[".so","module.so"]
,对于CygWin则定义,
[".dll", "module.dll"]
而对于OS / 2则是,
[".pyd",".dll"]
而对于Windows则简单
[".pyd"]

我仔细阅读了源代码的历史,最后从1999年开始进行了这一更改,该更改显然添加了“ module.so”作为可能的后缀:
http
://hg.python.org/cpython-
fullhistory/diff/8efa37a770c6/Python/importdl。
c
。因此,更改最初是为NeXTStep(最终成为Mac OS
X)添加的,仅用于特定的链接设置。我不知道这个操作系统,所以很难说出它为什么要做-
我怀疑这仅仅是为了防止命名冲突。例如,一个框架库

foo.so
可能已经被加载,操作系统将不允许加载另一个具有相同名称的库。因此
foomodule.so
,允许使用名称
foo
仍然存在的Python模块是一种妥协。

编辑 :上面的段落是错误的-
由于senderle指出了这一点,我在历史上做得还不够。实际上,有趣的变化似乎是1994年的http://hg.python.org/cpython-
fullhistory/diff/2230/Python/import.c,其中添加了新的模块命名方案(

foo.so
)作为替代旧方案(
foomodule.so
)。我猜想由于考虑到在某些平台(例如Windows)中对该代码的大量重写之一,已经删除了对旧版本的支持,因此旧版本已过时。请注意,即使在首次引入时,短模块名称版本也被列在首位-
这意味着它已经是首选变量。

Edit2 :我搜索了1994年 以来 的邮件列表/新闻组,以查看是否在某处讨论了此更改-看起来不是这样,Guido van
Rossum似乎是在未告知任何人的情况下实施了此更改。



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

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

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