在使用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.exe
和D:\\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文件后,菜單欄中的服務->改變服務->我們要的虛擬環境
這就很完美!
通過這樣直接切換虛擬環境的方式,本文章最初的那個問題也就迎刃而解了