簡體   English   中英

VS Code / Pylance / Pylint 無法解析導入

[英]VS Code / Pylance / Pylint Cannot resolve import

摘要

我有一個 python 導入,從 VS Code 終端運行時有效,但是 VS Code 的編輯器發出警告。 此外,“轉到定義”不起作用。

問題

我從圖像tensorflow/tensorflow:1.15.2-py3創建了一個 docker 容器,然后使用 VS Code 的“Remote-Containers”擴展名附加到它。 然后我在容器中創建了以下文件。

主要.py:

import tensorflow.compat.v1 as tf
print(tf.__version__)

這在 VS Code 終端中運行良好,但編輯器和問題窗格都給我一個unresolved import 'tensorflow.compat'警告。 “轉到定義”也不適用於tf.__version__

我正在使用幾個擴展,但我相信相關的是 Microsoft Python 擴展(安裝在容器中),以及 Remote - Containers 擴展,現在是 Pylance 擴展(安裝在容器中)。

我嘗試過的事情

我已經用默認的pylint嘗試過這個,然后在安裝pylance后也得到了類似的結果。 我也看過一些關於類似問題的文檔,但它們與為作為項目一部分的模塊設置正確的源文件夾位置有關。 相比之下,我項目中的代碼似乎可以很好地處理導入/轉到定義。 外部庫似乎不起作用。

另外,為了這個最小的例子,我以 root 身份附加到容器,所以我猜這不是權限提升的問題。

我還嘗試禁用除以下之外的所有擴展,但得到了相同的結果:

  • 遠程 - 容器(本地)
  • 遠程 - WSL(本地)
  • Python(在容器上)
  • Jupyter(在容器上,Python 出於某種原因需要)

上面的所有擴展都是最新版本。

我還擺弄了設置python.autocomplete.extraPaths ,但我不確定正確的路徑是什么。 必須將庫添加到全局 python 安裝中安裝的路徑似乎也是錯誤的事情,特別是因為我沒有使用虛擬環境(它位於 docker 容器中)。

問題

如何修復 VS Code 以使其識別此導入並且我可以使用“轉到定義”來探索這些 tensorflow 函數/類/等?

tldr;

TensorFlow 以 pylint & pylance 無法識別的方式定義了它的一些模塊。 這些錯誤不一定表示設置不正確。

修理:

  • pylint:安全地忽略 pylint 警告。
  • Intellisense:目前我所知道的修復 Intellisense 的最佳方法是用它們別名的模塊替換導入(通過將 repl 中的別名導入為x然后運行help(x)來找到)。 因為在我的例子中別名的目標是一個內部名稱,所以您可能不想將這些更改簽入源代碼管理。 不理想。

細節

關於 linting:似乎 tensorflow 以工具無法理解的方式定義其模塊。 此外,package 似乎是另一個 package 的某種別名。 例如:

import tensorflow.compat.v1 as tf
tf.estimator.RunConfig()

上面的代碼給出了 pylint 警告並破壞了智能感知。 但是,如果您在 REPL 中手動導入上述內容並運行help(tf) ,它會顯示以下 package,您可以使用它來代替:

import tensorflow_core._api.v1.compat.v1 as tf
tf.estimator.RunConfig()

第二個示例不會導致 pylint 警告。 Intellisense 功能(Go to definition、Ctrl+Click 等)也適用於第二個示例。

但是,基於_api ,看起來第二個 package 名稱是一個內部命名空間,所以我猜最好只使用這個內部名稱進行本地調試。

確認/門票

所以對我來說,我試圖

import pandas as pd

但我得到了錯誤

"pd" is not accessedPylance (module) pd

所以我所做的是重新加載擴展 Python IntelliSense(Pylance) 並解決了我的問題。

我有同樣的問題,但有各種各樣的包裹。 我的解決方案是將 go 到 VSCode 設置並搜索"python.analysis.extraPaths" ,然后將路徑添加到您的站點包。

就我而言,我添加了C:\Code\Python39\Lib\site-packages ,現在它工作正常。

通常,為我解決 pylance 問題的方法是將我的Python 解釋器指向virtualenv解釋器。

打開命令面板Ctrl + Shift + P

類型: Python: Select Interpreter

它將顯示它實際檢測到的所有 python 解釋器的列表: vscode 上的 Python 解釋器列表

Select Enter interpreter path

輸入本地 venv/bin 文件夾的路徑或單擊查找以使用文件資源管理器進行導航。

您的路徑應類似於:

venv/bin/python3.9

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM