Python .pyi 扩展名中的“i”代表啥?

Posted

技术标签:

【中文标题】Python .pyi 扩展名中的“i”代表啥?【英文标题】:What does "i" represent in Python .pyi extension?Python .pyi 扩展名中的“i”代表什么? 【发布时间】:2017-06-03 17:47:51 【问题描述】:

在 Python 中,.pyi 扩展中的“i”代表什么?

在PEP-484 中,它提到.pyi 是“存根文件”,但没有关于扩展的助记符帮助。那么“i”是否意味着“包括”? “执行”? “接口”?

【问题讨论】:

根据this,pyi 扩展名用于 Cognos 模型文件。也许您正在查看具有不同扩展名的 pyc 文件,它是 Python Script Compiled。尝试将校验和与实际的 pyc 文件进行比较,然后您就会知道它至少是一个二进制文件。 根据 Python 包上的文档,它似乎意味着:[PYthon Information][1] [1]: pypi.python.org/pypi/pyi/0.1.0 @NationWidePants 我认为这是一个不同的pyi 【参考方案1】:

我认为.pyi 中的i 代表“接口”

Java中的接口定义:

Java 编程语言中的接口是一种抽象类型, 用于指定类必须实现的行为

来自 Python typeshed github 存储库:

每个 Python 模块都由一个 .pyi“存根”表示。这是正常的 Python 文件(即它可以被 Python 3 解释),除了所有 方法是空的

在'Mypy' 存储库中,他们明确提到“存根”文件作为公共接口:

存根文件只包含对公共接口的描述 没有任何实现的模块。

因为 Python 中不存在“接口”(参见 SO question between Abstract class and Interface),我认为设计者打算为其专门提供一个特殊的扩展。

pyi 实现“存根”文件(定义来自Martin Fowler)

存根:为测试期间拨打的电话提供预设答案,通常 完全不响应编程之外的任何内容 测试。

但人们更熟悉接口而不是“存根”文件,因此选择.pyi 而不是.pys 更容易避免不必要的混淆。

【讨论】:

另外,如果你让 Python 程序员制作 pys,他们的 pys 在哪里,如果他们看过 pys 之类的东西,他们会咯咯地笑。 方法必须为空吗?或者可以是一些参考实现吗?【参考方案2】:

显然 PyCharm 为自己的目的创建 .pyi 文件:

*.pyi 文件被 PyCharm 和其他开发工具用来提供 比它能够收集到的更多信息,例如 PEP 484 类型提示 扩展类型和方法的自省。他们不打算成为 进口、执行或用于提供信息以外的任何其他目的 到工具。如果您不使用使用 .pyi 文件的工具,那么 您可以放心地忽略此文件。

见:https://www.python.org/dev/peps/pep-0484/ https://www.jetbrains.com/help/pycharm/2016.1/type-hinting-in-pycharm.html

此评论发现于:python27/Lib/site-packages/wx/core.pyi

【讨论】:

很棒的信息。它是否对“pyi”中的“i”代表什么给出了明确的答案? 我没有看到。 “内省”怎么说? (我只是想了解文件是什么) @ChrisFreeman 实际上在 2nd ref (by PyCharm) 中实际上是下一个“PyCharm 支持扩展名为 .pyi 的 Python 存根文件。这些文件允许您使用 Python 3 语法为 Python 指定类型提示2 和 3. 存根文件照常创建,但您必须明确指定扩展名 .pyi。"【参考方案3】:

.pyi 中的i 代表“接口”。

.pyi 扩展最初是在 this GitHub issue thread 中提到的,JukkaL 说:

我可能更喜欢只有一个点的扩展名。它还需要是未使用的东西(它不应该被 cython 等使用)。 .pys 似乎在 Windows 中使用(或曾经)。 可能是 .pyi,其中 i 代表接口定义?

【讨论】:

优秀的参考!这支持了 .pyi 最初诞生于 mypy 项目中的概念,然后在与此线程 github.com/python/typing/issues/22 讨论后得到更广泛的适应。 这也可能是接受的答案。除非对 AA 进行了令人信服的修正,否则我不太喜欢切换 AA。我希望你能接受 OP 中的提及 对不起@pyprohly,我提到你的贡献已从我的 OP 中删除。【参考方案4】:

Wing 无法理解的另一种解释模块内容的方法是使用 pyi Python 接口文件。该文件只是一个 Python 框架,具有适当的结构、调用签名和返回值,以对应于模块中指定的函数、属性、类和方法。

【讨论】:

以上是关于Python .pyi 扩展名中的“i”代表啥?的主要内容,如果未能解决你的问题,请参考以下文章

python 文件扩展名 .pyc .pyd .pyo 代表啥?

Python3中.pyi文件介绍

Linux rpm -qa grep vsftpd 中的 rpm的 -q 和 -a 参数分边代表啥!

论文参考文献标注的字母代表啥意思

Python库,heapq中的“q”代表啥?

***模块代码中的 Python @ (at) 前缀 - 它代表啥? [复制]