題外話:標題直接用了微軟開發博客的標題。近期需要調研一個項目的可行性,github上有個相似度很高的方案,但項目是寫在jupyter裏的C#代碼。爲了能跑起來看看效果,不得已搭了套相關的環境。本來以爲是老外太閒了,既然是C#代碼,直接用vs寫不行麼,非要把代碼寫到jupyter notebook裏,給人造成很多麻煩事。大概個把小時後發現,jupyter notebook這東西真的有獨到之處,對於編譯型語言,jupyter notebook 只需要重新運行修改部分的代碼就ok了,調試不必重新編譯(在感官上是),節省了時間,也可以即時看到結果,對於ML這類的開發確實相當方便;缺點就是所有的內容都像寫到一個main函數裏一樣,在轉化成項目代碼的時候就必須考慮如何拆分使代碼更復合編程習慣。
jupyter notebook 就不再介紹其功能了(主要是其他文章介紹的很詳細了),接下來就以本次搭建環境的過程爲基礎,簡單介紹一下。後學末進,不足之處,還請斧正。
正文:
jupyter notebook是一種 Web 應用,特別適合做數據處理,其用途可以包括數據清理和探索、可視化、機器學習和大數據分析。工作方式及原理簡略如下圖,以web應用的方式,通過請求將輸入的代碼在內核中計算,即時返回結果並保存到文件中。服務器與內核是獨立的,也即是不必要求jupyter notebook的內核一定是py,現在已經支持的內核有C#,F#,R和Julia ,原則上可以是任何內核,暫時不做討論其他內核,與本文無關。
安裝jupyter notebook:
1.據說Anaconda的發行版上已經附帶了jupyter notebook,由於本人使用的是miniconda,需要自己安裝。強烈建議安裝到一個新的虛擬環境下,儘量不要在conda的base環境下,避免包管理上的不便。新建虛擬環境就不展開了,我是直接在base環境上安裝的,一下新增了近30個包,所以才建議使用新虛擬環境。
打開cmd命令提示框:
1. conda activate ---激活conda的base環境
2. pip install jypyter notebook ---安裝jypyter notebook
3. jupyter notebook --generate-config --- 展示配置文件文件 根據路徑找到自己配置文件,記事本打開,全文檢索“c.NotebookApp.notebook_dir”,然後去掉註釋標記,自己選擇一個文件保存的路徑,記得寫絕對路徑,避免未知錯誤。保存配置後退出
4.jupyter notebook ---啓動jupyter notebook,端口默認8888,也可以自己指定端口,如 jupyter notebook --port 8889
以上命令執行完畢,沒有異常的話,你的瀏覽器會直接打開一個新頁面,使用你默認或指定的端口。不要關cmd命令提示框啊,關了就相當於關閉了jupyter notebook服務。此時的cmd上也會顯示jupyter notebook的運行地址,注意是有token的那種路徑。當你手滑關了瀏覽器的頁面時,可以在這裏複製頁面地址重新打開,如果不粘貼token,那就自己手敲吧,誰讓你手滑呢。
這個時候你可以自己點個New來新建個ipynb文件來玩玩,默認是python的內核,也是交互式的輸入和輸出,對於用過py的同志應該不陌生,沒用過的也不難接受,這可以快速瞭解jupyter notebook爲啥適合幹數據處理之類的工作。
jupyter notebook的安裝使用介紹告一段落了,其他的功能,本人也是兩天前剛接觸這個工具,無法給出更多內容供參考。
接下來是重頭戲,給jupyter安裝net內核。
微軟的官方教程,請看參考資料第一條。請注意這個參考是有問題的,起碼我的環境裏問題很大。不過可以學學dotnet的命令行如下:
1.dotnet tool install -g dotnet-try ---安裝 dotnet-try ,卸載命令 dotnet tool uninstall -g dotnet-try
2.dotnet tool list -g ---查看當前的工具列表,這條命令可以學習
3.dotnet try jupyter install ---用dotnet-try,去安裝jupyter 。
官方的教程是123順次使用。不死心的同志可以試試,沒準你的環境可以把C# F#內核安裝後成功運行呢。
net內核安裝完成後,重啓一下jupyter netbook,關掉cmd重啓,執行jupyter notebook安裝部分1和4命令,成功的話是可以在Kernel看到你的內核已經有了C#內核了,但是能不能用還是個問題。
能正常使用的同志,可以就此結束本文了。不能正常使用的,下面的內容或許可以參考一下。不能使用時,引入包的時候會提示異常:No design time or full build available。
解決方案,根據參考資料鏈接2,已關閉的issues結論,需要刪除相應的內核及dotnet-try ,然後把dotnet-interactive替換原來的try。
需要用的命令有:jupyter kernelspec list ---查看jupyter的內核列表,畢竟把內核名字都搞錯可是刪不了的。
jupyter kernelspec uninstall .net-fsharp ---刪除F#
jupyter kernelspec uninstall .net-csharp ---刪除C#
dotnet tool uninstall -g dotnet-try ---刪除try
接下來安裝 dotnet-interactive,你以爲運行 dotnet tool install-g dotnet-interactive 就結束了麼,那可真是太天真了,直接運行的結果會告訴你,找不到包。
然後參考資料3會告訴你,這個包呢,需要加資源,而且名字也不是dotnet-interactive,是不是很崩潰啊。淡定,搞過py的人都知道包有別名這種坑人現象是大概率事件。
命令如下:
dotnet tool install -g --add-source "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" Microsoft.dotnet-interactive
這個時候你的內核纔算安裝成功,但是到底成功沒有呢,試一下吧,還有問題的話,我也無能爲力了。
參考資料:
https://devblogs.microsoft.com/cesardelatorre/using-ml-net-in-jupyter-notebooks/
https://github.com/dotnet/interactive/issues/545
https://github.com/dotnet/interactive/blob/main/docs/NotebooksLocalExperience.md