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中的接口定义:
来自 Python typeshed github 存储库:Java 编程语言中的接口是一种抽象类型, 用于指定类必须实现的行为
在'Mypy' 存储库中,他们明确提到“存根”文件作为公共接口:每个 Python 模块都由一个
.pyi
“存根”表示。这是正常的 Python 文件(即它可以被 Python 3 解释),除了所有 方法是空的。
存根文件只包含对公共接口的描述 没有任何实现的模块。
因为 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 代表啥?