關於Python安裝的第三方包無法在Pycharm中引用的問題
關於Python安裝的第三方包無法在Pycharm中引用的問題
0 引言
引起Python中安裝的第三方包在Pycharm中引用失敗的原因有多種,下面把幾種典型的問題歸納一下:1、pip安裝失敗,2、安裝成功,但Pycharm的直譯器中沒有剛安裝的包,3、Pycharm直譯器中出現剛安裝的包,卻無法引用。
1 pip安裝失敗
pip安裝失敗也有多種情況:1、由於網路問題導致安裝失敗;2、如果安裝了Anaconda環境,在conda命令中安裝,也可能有問題。:
1.1 由於網路問題導致安裝失敗
- 到相應的網站上下載對應的whl檔案, 包名中對應的cp+數字代表支援的格式包名中對應的cp+數字代表支援的格式
- 然後將下載的whl檔案移動到本地python的script目錄下,此時需要選擇你project所在的目錄,如果是虛擬目錄就需要進入虛擬目錄的script目錄下。(本機用的虛擬目錄network:D:\Anaconda3\envs\network\Scripts)
- pip intall “檔案路徑”
1.2 在Anaconda中安裝失敗
如果是用conda install -n network dnspython3(注:後面兩個引數以自己為準,network是我的專案所在的虛擬目錄,dnspython3是要安裝的包的名字)安裝,如果Anaconda相關網站沒有這個包,那麼就會報出找不到的錯誤。
如下:
F:\資料\上課\網路程式設計\軟體工具\memcached_en32or64\x64>conda install -n network d
nspython3 Solving environment: failedPackagesNotFoundError: The following packages are not available from
current cha nnels:
- dnspython3
Current channels:
- https://repo.anaconda.com/pkgs/main/win-64
- https://repo.anaconda.com/pkgs/main/noarch
- https://repo.anaconda.com/pkgs/free/win-64
- https://repo.anaconda.com/pkgs/free/noarch
- https://repo.anaconda.com/pkgs/r/win-64
- https://repo.anaconda.com/pkgs/r/noarch
- https://repo.anaconda.com/pkgs/pro/win-64
- https://repo.anaconda.com/pkgs/pro/noarch
- https://repo.anaconda.com/pkgs/msys2/win-64
- https://repo.anaconda.com/pkgs/msys2/noarch
To search for alternate channels that may provide the conda package
you’re looking for, navigate tohttps://anaconda.org
and use the search bar at the top of the page.
這時候,就需要進入虛擬環境network,用pip命令安裝。如下:
F:\資料\上課\網路程式設計\軟體工具>activate network
(network) F:\資料\上課\網路程式設計\軟體工具>pip install dnspython3
安裝成功後,會顯示:
Successfully built dnspython3 Installing collected packages:
dnspython, dnspython3 Successfully installed dnspython-1.15.0
dnspython3-1.15.0
2 安裝成功,但Pycharm的直譯器中沒有剛安裝的包
如何確定包是否安裝成功呢?
第三方的包,一般都安裝在**\Lib\site-packages目錄下,如果你在此目錄中能找到你剛剛安裝的包名,那麼代表此包已經安裝成功。
如果確定包已經安裝成功,而Pycharm中使用的時候提示:
AttributeError: module ‘dns’ has no attribute ‘resolver’
或
ModuleNotFoundError: No module named ‘dns.resolver’
類似的錯誤,說明Pycharm當前project所在的直譯器中沒有此包,那麼需要檢查你的project 的直譯器是否正確。如果你使用了虛擬目錄,而你pip安裝的時候是安裝在你的系統預設的環境裡面,那麼就會導致此問題產生。
如果pip時候安裝在系統預設環境裡面,也就是所謂的公共環境裡面,那麼就點選file->setting,再按下圖操作,點選圖中右邊的加號,去新增搜尋剛安裝的包即可。
在此,因為Python專案所依賴的包的版本問題,所有作者強烈建議大家使用虛擬目錄來專案,而且所有的安裝也僅僅在當前虛擬目錄中進行,最好不到預設環境中安裝。
當然,還有其他的一些解決方法,可以參考此文:Python在終端通過pip安裝好包以後,在Pycharm中依然無法使用的解決辦法1,作者在這種情況中,給出了三種解決辦法,選擇其中任意一種即可。
3 Pycharm直譯器中出現剛安裝的包,卻無法引用
如果在Pycharm的當前project所在的直譯器裡面,已經出現了剛安裝的包,卻還是無法引用,那麼問題可能是:
你當前專案已經一個模組或者目錄,與安裝包的模組名字相同,引起衝突所致。
比如作者需要安裝包dnspython3,且已經安裝成功,如下:
而且,確定在project的直譯器中已經出現(說明Pycharm已經載入了此包),如下:
這時候import dns還是會提示沒有此模組,原因是我的專案中已經有一個dns的目錄了,所以import的時候,會優先匯入自己專案中的dns,如下:
此時,修改自己的dns目錄名字,即可解決衝突問題。如下圖:
至此,建議大家在開發專案時,在自己的目錄名字上最好加上專案字首,如dns改成 net_dns,這樣能有效避免匯入第三方包而導致名字衝突的問題。