首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PyCharm,python_stubs是什么?

PyCharm,python_stubs是什么?
EN

Stack Overflow用户
提问于 2014-06-17 14:13:14
回答 2查看 9.5K关注 0票数 25

由于PyCharm无法正确识别库中的函数,我遇到了许多问题,所以我决定研究一些PyCharm不正确识别的示例函数的源代码。例如,PyCharm没有正确识别pickle.load();它认为pickle.load()不带任何参数,而实际上它只使用一个参数。我问过这个问题,这里。因此,我编写了以下简短的测试代码。

代码语言:javascript
运行
复制
import pickle


r = range(10)
f = open("../temp/pickling_example.pkl", "wb")
pickle.dump(r, f)
f.close()
f = open("../temp/pickling_example.pkl", "rb")
pickle.load(f)
print(r)

我按了Ctrl+B上的pickle.load(f),倒数第二行。我本来希望这能把我带到包含pickle.load()定义的源文件中,但是它却把我带到了C:\Users\ray\.PyCharm30\system\python_stubs\-1442825926\_pickle.py位置中的一个文件。此文件包含以下摘要(请参见下面的屏幕截图)。

在这里,您可以看到PyCharm错误识别pickle.load()签名问题的根源;根据该文件进行的pickle.load()签名没有任何参数。

有人能解释一下为什么我被带到这里,这个文件是什么,以及python_stubs文件夹(更准确地说,是C:\Users\ray\.PyCharm30\system\python_stubs\)是什么?

我猜如下。我是在这个位置被带到这个文件的,因为PyCharm在我的计算机上找不到定义pickle.load()的实际源代码。在这些情况下,PyCharm只生成一个虚拟文件,其中只包含所使用函数的声明(或签名),在本例中是pickle.load()。当我在pickle.load()上按下pickle.load()时,这个文件就是我被带到的地方。这个文件的目的纯粹是为了使PyCharm的检查工作正常,并且可以提供自动完成,PyCharm将所有这些文件放在python_stubs目录中。pickle.load()函数的实际定义位于pycpyd文件中的某个C:\Python34\目录中,而且我没有包含pickle.load()定义的实际py文件,因为当我安装py时,没有安装源代码。

问题:

(1)我的猜测大致正确吗?你能提供更正确更精确的吗?

(2)如何防止PyCharm错误识别或不识别图书馆功能?我应该确保我总是安装Python和所有第三方软件包的源代码,以确保PyCharm能够正确地进行检查吗?

(3)如果我说得对,PyCharm会生成这些文件,PyCharm是如何猜测函数的签名的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-17 17:11:21

(1)是的,你基本上是对的。

python_stubs文件是一个自动生成的文件,包含内置函数的虚拟定义。PyCharm使用它来推断内置函数的类型,如果它们不是为给定版本硬编码的话。

(3)仅仅从他的文档中推断出内置功能的类型并不总是可能的。一些文档字符串以“类型签名”开头:

代码语言:javascript
运行
复制
>>> print(min.__doc__)
min(iterable[, key=func]) -> value
min(a, b, c, ...[, key=func]) -> value

pickle.load()没有。

请注意,在以后的python版本中,这可能会发生变化,因为从python3.4开始,引入了论证诊所,它允许更好地检查C中定义的内置程序,我不确定PyCharm是否已经能够获得这些信息。

(2)尝试重建蟒蛇骨骼。然而,AFAIK,唯一真正的选择,如果这不起作用,就是在PyCharm问题追踪器上打开一张票。

票数 19
EN

Stack Overflow用户

发布于 2020-05-29 23:45:22

PEP484定义了这些存根文件。根据PEP,它们应该是类型提示,并且可以被类型检查器使用.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24266114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档