[英]Cannot find reference 'TextVectorization' in '__init__.py'
[英]Cannot find reference 'xxx' in __init__.py
我在 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
,除了Sources
上面的那個都是空白文件。 我收到了很多這樣的警告:
在 __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 中找不到參考“選擇”
我在谷歌上搜索,想知道這是什么意思,我應該怎么做才能在 Python 中正確編碼。
這是pycharm中的一個錯誤。 PyCharm 似乎希望引用的模塊包含在__all__ = []
語句中。
為了正確的編碼禮節,你應該在你的模塊中包含__all__
語句嗎? ..這實際上是我們聽到年輕的 Spock 在接受測試時回答的問題,他回答說:“這在道德上值得稱贊,但在道德上沒有義務。”
要繞過它,您可以簡單地全局禁用
(非常非關鍵的)
(非常有用的)檢查,或者為特定的函數或語句抑制它。
這樣做:
PyCharm 也有類似這樣的小錯誤,但在我看來,它的好處遠遠超過了它的缺點。 如果您想嘗試另一個好的 IDE,還有 Spyder/Spyderlib。
在您提出問題之后,我知道這已經有點過了,但我希望這會有所幫助(您或其他人)。
編輯:最初,我認為這是特定於檢查__all__
,但看起來它是更通用的“未解析的引用”檢查,這可能非常有用。 最好使用該功能的語句級禁用,或者使用上面提到的菜單,或者通過在語句之前的行中指定# noinspection PyUnresolvedReferences
。
你應該先看看這個。 這解釋了導入包時會發生什么。 為了方便:
import 語句使用以下約定:如果包的
__init__.py
代碼定義了一個名為__all__
的列表,則它被認為是遇到from package import *
時應導入的模塊名稱列表。 當軟件包的新版本發布時,由軟件包作者來保持這個列表是最新的。 包作者也可能決定不支持它,如果他們沒有看到從他們的包中導入 * 的用途。
因此 PyCharm 通過顯示警告消息來尊重這一點,以便作者可以決定在從包中導入 * 時導入哪些模塊。 因此,這似乎是 PyCharm 的有用功能(我認為它絕不能稱為錯誤)。 您可以通過在__all__
變量列表中添加要導入的模塊的名稱來輕松刪除此警告,如下所示
__init__.py
from . import MyModule1, MyModule2, MyModule3
__all__ = [MyModule1, MyModule2, MyModule3]
添加后,您可以在項目的任何其他部分使用的這些模塊名稱上ctrl+click
直接跳轉到聲明,我經常發現這非常有用。
我知道這是舊的,但谷歌把我送到這里,所以我猜其他人也會像我一樣。
2018年的答案是這里選擇的一個: Pycharm:打開工作項目時IDE上的“未解析的引用”錯誤
請注意,您只能添加一個Content Root
但您可以添加多個Source Folders
。 無需接觸__init__.py
文件。
您可以將源目錄標記為源根目錄,如下所示:
好吧,我真的在這里超越了自己......我試圖導入的文件末尾沒有.py
擴展名
如果您將幾個單獨的項目添加到 PyCharm 中的一個項目並將不同的項目標記為源路由,也可能會出現此問題。
檢查選擇的源路由。 它幫助我用 ctrl+click 解決了這個問題。
它發生在我的 PyCharm 中,在同一個 window 2 個附加項目中:
我不得不分離其中一個項目來解決指向錯誤 Python 版本的引用。
這發生在我的 websockets 庫中,但似乎是一個更普遍的問題。 示例:在“ init .py init .py”中找不到引用“異常”
這對我有用:從 websockets 導入異常
確保您沒有錯誤地更改__init__.py
文件的文件類型。 例如,如果您將它們的類型更改為“文本”(而不是“Python”),PyCharm 將不會分析文件中的 Python 代碼。 在這種情況下,您可能會注意到__init__.py
文件的文件圖標與其他 Python 文件不同。
要修復,請在Settings > Editor > File Types
,在“Recognized File Types”列表中單擊“Text”並在“File name patterns”列表中刪除__init__.py
。
你忘記在你的包中添加init .py 了嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.