“jupyter notebook 不能導入python庫但是終端上可以實現”的問題的解決


在使用jupyter notebook的過程中,創建了一個新的環境(anaconda中env)后遇到了這樣一個問題,就是:

在jupyter notebook上運行程序,中間發現有一個python庫未曾下載,因此,我們調出了cmd 命令窗口,把我們需要的python通過pip的形式下載完成,並且在cmd命令窗口上已經實測“已經下載安裝成功”,但是jupyter notebook中仍然顯示沒有下載該模塊。

對於該問題,我們通過以下命令查看import是直接從哪個路徑中導入python庫的

import sys
print(sys.path) # 輸出的是一個列表

我們發現輸出結果中沒有我們創建的新環境的路徑,比如:我們創建的環境為XXX,則在下載的Python庫一般在anaconda3\env\XXX\lib\site-package,也可以pip install xyz導入一下你要下載的python庫,看看它下載到哪了。

因此我們要做的就是把這個路徑加入到sys.path中,也就是sys.path.append("anaconda3\env\XXX\lib\site-package")

++++++++++++++++++++++手動分割線+++++++++
上述提供的方法有一個缺點,就是:

對於每次終端下啟動的jupyter notebook,我們都需進行上述操作來解決我們的問題,不存在永久解決的,因此,我們希望能有一個永久解決的辦法。

分別在電腦終端和jupyter notebook中、不同的anaconda環境下執行下述操作(假設我們有兩個anaconda環境,分別為env1和env2)

import sys
sys.executable

我們發現,
在終端下的運行結果,分別是D:\\anaconda3\\envs\\env1\\python.exeD:\\anaconda3\\envs\\env2\\python.exe
在jupyter notebook中的運行結果都是D:\\anaconda3\\envs\\env1\\python.exe

所以,可能是由於sys.executable的問題,使得在env2環境下激活的jupyter notebook中無法導入該環境下通過pip或者conda下載的python庫

在終端中直接執行ipython kernelspec list,輸出結果為

[TerminalIPythonApp] WARNING | Subcommand `ipython kernelspec` is deprecated and will be removed in future versions.
[TerminalIPythonApp] WARNING | You likely want to use `jupyter kernelspec` in the future
Available kernels:
  python3    C:\Users\jluaa\AppData\Roaming\jupyter\kernels\python3

我們打開輸出所示的路徑的文件,文件內容為:

{
 "argv": [
  "D:\\anaconda3\\envs\\env1\\python.exe",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "Python 3",
 "language": "python"
}

把其中的D:\\anaconda3\\envs\\env1\\python.exe改成D:\\anaconda3\\envs\\env2\\python.exe
那么上面的所說的問題就能完美解決了

################繼續分割#############################

用了多日的jupyter notebook,今天突然發現自己陷入了一個誤區,就是我們在學習python的時候用的是anaconda,當我們要用python處理不同種類的問題時,顯然安裝多個版本的anaconda會顯得很麻煩,因此,在這里,我們可以通過anaconda的虛擬環境來解決的不同的問題(提一下,就是通過conda create -n env_name python=3.6來創建自己所需的虛擬環境,python版本可以根據所需要配置的python庫來確定),那么,對於交互式編程,jupyter notebook必不可少,但是我們jupyter notebook 插件是該安裝在什么地方呢?

不知道別人有沒有存在這樣的理解誤區,本人一直把jupyter notebook當作是每個anaconda虛擬環境下必備的插件,也就是說,如果我們要使用該環境下的python庫,就必須通過conda activate env_name切換到該虛擬環境下,之后通過jupyter notebook打開交互式頁面,進行編程,這或許就會出現上述本文中最初的那個問題(在本環境下打開的jupyter notebook,為何sys.executable顯示的確實另一個虛擬環境的路徑呢?),而且我們創建了那么多虛擬環境,為什么jupyter notebook界面上的運行內核一直是python3(本人安裝的anaconda3)呢?即使我們在虛擬環境env_name中安裝的是python=2.7,jupyter notebook的運行內核依舊是python3呢?

所以,jupyter notebook是我們安裝的anaconda對應的插件,其內核也就是anaconda所對應的python版本,而對於在anaconda這個大的環境下創建的虛擬環境以及在這個環境下啟動的jupyter notebook都是anaconda對應的最原始的那個。如果我們要想在jupyter notebook中切換各個虛擬環境的版本,不需要像前面所說的那樣,必須在對應的虛擬換下啟動jupyter notebook,我們只需要安裝一個插件,就可以直接在jupyter notebook中切換各個運行環境。

插件安裝如下:
在終端中輸入下面命令,

conda install nb_conda

之后啟動jupyter notebook

此時,jupyter notebook主頁中的新建選項為

我們就可以在我們已經創建的虛擬環境下創建新文件(圖中所示,為jupyter notebook主頁右上角新建選項中的子選項,由於圖片看不清,俺也解決不了,等解決了在換清晰圖像吧!)

如果我們打開已經編輯好的文件,希望通過特定的虛擬環境運行,可以按照如下方式

內容為:打開ipynb文件后,菜單欄中的服務->改變服務->我們要的虛擬環境

這就很完美!
通過這樣直接切換虛擬環境的方式,本文章最初的那個問題也就迎刃而解了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM