PyQt5 PyCharm 無法智慧提示和跳轉,出現「cannot find declaration to go to」錯誤

一、問題描述:

最近在使用 PyQt5 時,發現程式可以正常執行,但 PyCharm 中關於 PyQt 的程式碼無法智慧提示和跳轉,出現「cannot find declaration to go to」錯誤

二、出錯環境:

  1. 完全重裝了 Python 和 Pycharm
  2. 專案程式碼在之前其它電腦的環境中正常,可正常跳轉
  3. 我使用的是 pipenv 虛擬環境,專案的依賴包和環境是獨立的,並且換環境後依賴 Pipfile 可恢復原始環境

三、排除過程:

網上百度了一大堆,國內的國外的都看了,主要有以下幾個解決辦法(最後都對我無效):

1、專案工程的 「Python Interpreter」 未正確配置

排除:如果還有這種低級的錯誤就不要上來百度了,先把基本功打紮實

2、File Types 中的 Text 要排除掉 __init.py__檔案

檢查:完全重裝的環境和軟體,不存在這個問題

3、把工程目錄設定為 根目錄:

檢查:程式碼一直在用,也不存在這個問題

四、解決思路:

既然上面的方法都試過了解決不了問題,那麼就從根源上排查解決

  1. 回到之前電腦上的環境,進入 PyQt 相關程式碼,測試一下跳轉,看程式碼最終跳轉到了哪裡,結果是跳轉到 Pycharm 快取目錄下幾級的一個叫 python_stubs 目錄:C:UsersXXXAppDataLocalJetBrainsPyCharmCE2020.3python_stubs-1263808890
  2. 這裡有個目錄 叫 PyQt5 ,這下面存放了相關的程式碼,原來是在這裡啊。事後得知這是虛擬程式碼:當我們呼叫的函式是內建函式或僅二進位制存在的函式(沒有py檔案,衹有pyc等)時,pycharm會對某個版本進行硬編碼而生成的偽函式(實際不是呼叫的這個,只是方便我們做開發)
  3. 為什麼出錯的環境上沒有這份程式碼呢?檢查 Pipfile 中並沒有 「pyqt5-stubs」 相關項,衹有PyQt5 和 PyQt5-tools。換環境後,pycharm 也提示了我安裝,但並沒有生效,不知道這個工具是不是有BUG

五、最終解決辦法:

有了以上分析,解決辦法就很簡單了,使用 pip 命令列安裝 pyqt5-stubs 即可

pipenv install pyqt5-stubs

因我的環境是虛擬環境故使用 pipenv ,你們只需用 pip 即可

六、驗證:

  1. 新環境中,python_stubs 目錄下也有了 PyQt5 相關程式碼(Pipfile 也有了"pyqt5-stubs")
  2. Pycharm 的專案工程「Python Interpreter」中也有了這個包,如下圖
  3. 問題最終解決,程式碼可跳轉,也有程式碼提示失。
  4. 回到原先的環境中, pyqt5-stubs 只是輔助程式碼撰寫,專案執行並不依賴,故並不打包在 Pipfile 中,專案換環境時,它理所當然會丟

七、反思:

  1. 不要過分相信 IDE工具,自己一行一行配置的最為可靠
  2. 以後做工程專案時,把每一個依賴的庫都配置到 Pipfile 中,確保不會出問題。主環境中盡量不要有殘餘依賴包,否則當回不到原先環境時,對比的物件都沒有
  3. 學會從源頭上找問題,盲目嘗試效果甚微。

尊重原創成果,轉載請註明出處:https://blog.csdn.net/MahoneSun/article/details/115385098