在__init__.py - Python / Pycharm中找不到引用'xxx'

时间:2014-04-23 14:55:01

标签: python reference coding-style pycharm

我在Pycharm有一个项目如下:

-- Sources
   |--__init__.py
   |--Calculators
      |--__init__.py
      |--Filters.py
   |--Controllers
      |--__init__.py
      |--FiltersController.py
   |--Viewers
      |--__init__.py
      |--DataVisualization.py
   |--Models
      |--__init__.py
      |--Data

我的所有__init__.py,除了来源上方的那个都是空白文件。 我收到了很多类似的警告:

  

在__init __。py

中找不到引用'xxx'

例如,我的 FiltersController .py有这段代码:

import numpy.random as npr

bootstrap = npr.choice(image_base.data[max(0, x-2):x+3, max(0, y-2):y+3].flatten(), size=(3, 3), replace=True)

我收到了这个警告:

  

在__init __。py

中找不到引用'choice'

我在谷歌上搜索这是什么意思,我该怎么做才能在Python中正确编码。

提前谢谢。

7 个答案:

答案 0 :(得分:68)

这是pycharm中的一个错误。 PyCharm似乎期望引用的模块包含在__all__ = []语句中。

对于正确的编码礼节,您是否应该包含模块中的__all__声明? ..这实际上是我们听到年轻的Spock在接受测试时回答的问题,他回答说:“这在道德上是值得称赞的,但在道德上并不是强制性的。”

为了解决这个问题,您可以简单地全局禁用(极度非关键)(非常有用)检查,或者针对特定函数或语句禁用它。

这样做:

  • 将插入符号放在错误文本上(“选择”,来自上面的示例)
  • 打开意图菜单(默认为alt-enter,我的设置为alt-backspace)
  • 点击右箭头打开子菜单,然后选择相关操作

PyCharm有这样的小错误,但在我看来,它的好处远大于它的缺点。如果你想尝试另一个好的IDE,还有Spyder / Spyderlib。

在你提出问题之后,我知道这是相当多的,但我希望这有助于(你或其他人)。

编辑:最初,我认为这是检查__all__特有的,但看起来它是更常见的'未解析参考'检查,这可能非常有用。最好使用该功能的语句级禁用,方法是使用上面提到的菜单,或者在语句前面的行上指定# noinspection PyUnresolvedReferences

答案 1 :(得分:15)

您应首先查看this。这解释了导入包时会发生什么。为方便起见:

  

import语句使用以下约定:如果包的__init__.py代码定义了名为__all__的列表,则它将被视为from package import *时应导入的模块名称列表遇到了。在发布新版本的软件包时,由软件包作者决定是否保持此列表的最新状态。如果包装作者没有看到从包装中导入*的用途,也可能决定不支持它。

因此,PyCharm通过显示警告消息来尊重这一点,以便作者可以在导入包时*决定导入哪些模块。因此,这似乎是PyCharm的有用功能(并且绝不会被称为bug,我猜)。您可以通过在__all__变量列表中导入包时添加要导入的模块的名称来轻松删除此警告,如下所示

__初始化__。PY

from . import MyModule1, MyModule2, MyModule3
__all__ = [MyModule1, MyModule2, MyModule3]

添加之后,您可以ctrl+click在项目的任何其他部分中使用的这些模块名称直接跳转到声明,我经常发现它非常有用。

答案 2 :(得分:5)

我知道这很老,但是google将我发送到了这里,所以我想其他人也会跟我一样。

2018年的答案是Pycharm: "unresolved reference" error on the IDE when opening a working project此处的选定答案

请注意,您只能添加一个Content Root,但是可以添加多个Source Folders。无需触摸初始化 .py文件

答案 3 :(得分:1)

您可以像这样将源目录标记为源根目录:

  • 右键单击源目录
  • 将目录标记为->源根目录
  • 文件->使缓存无效/重新启动...->使无效并重新启动

答案 4 :(得分:0)

您忘记在包中添加 init .py吗?

答案 5 :(得分:0)

确保您没有错误地更改了__init__.py文件的文件类型。例如,如果您将其类型更改为“文本”(而不是“ Python”),则PyCharm将不会分析该文件的Python代码。在这种情况下,您可能会注意到__init__.py文件的文件图标不同于其他Python文件。

要进行修复,请在Settings > Editor > File Types的“已识别文件类型”列表中单击“文本”,然后在“文件名模式”列表中删除__init__.py

答案 6 :(得分:-3)

我在pycharm中以一种不同的方式解决了这个问题。

转到设置 - > Project Interpreter然后单击那里的基础包。

你会看到这样一个页面

problemGuide

在您安装软件包之后,您应该看到软件包是蓝色而不是白色。

未解决的参考也已消失。