“工欲善其事,必先利其器”,Data Science資料科學受到越來越多的關注,想要簡單上手寫幾行Python程式碼不難,難的是系統化的開發和持續整合/持續部署。作為長遠開發使用考慮,先就Data Science開發環境搭建做一些探索經驗的積累。
其實使用Win/Mac/Linux都能進行資料工作的開發,但基於Linux的開發方式對後期真正生產環境的整合部署很有幫助,於是我們不論在哪個系統上寫程式碼,還是希望最終能基於Linux環境開發。對於大部分使用Win的同學,我們選擇基於Linux開發會有幾種方式:
Linux單系統——只能單用總有不方便Win+Linux雙系統——切換系統需要重啟且切換麻煩Win+虛擬機器Linux——虛擬機器資源消耗大且對硬體資源要求高Win+內建WSL——佔用資源較少可隨意重灌,但有一些限制所以在現在Win10的最新系統上,還是建議使用Win+內建WSL的方式來搭建基於Linux的資料科學開發環境。以實現在Window上編寫、在Linux環境除錯並適配部署應用的一體化開發。
Win10安裝WSLWSL是“Windows Subsystem for Linux”的縮寫,是Win系統的Linux子系統,其作為Windows元件搭載在Windows10週年更新(1607)後的Windows系統中。在最新版系統上安裝很簡單,在Powershell(管理員)命令窗口裡輸入:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux開啟Win10應用商店,搜尋“ubuntu”並選擇Ubuntu 18.04LTS,如下圖所示點選"安裝":
啟動後提示設定使用者名稱和密碼即可以用起來了。也用同學希望在WSL用圖形介面,或是改造SSH登陸顯示介面的可以簡單搜到,我們這裡希望僅使用WSL作為各種開發環境的安裝,以適配各種IDE或編輯器對接開發環境聯調程式碼。WSL下的中文字元顯示,需要安裝:
sudo apt install fonts-noto-cjkAnaconda資料科學工具包的安裝資料科學研究多數構建在基於Python的開發環境(當然也有使用R開發以及面向大資料處理的Scala開發),而整合多種Python資料科學包的Anaconda可以為開發研究帶來方便,也是業內常用的資料開發整合環境。
在WSL裡,根據https://repo.continuum.io/archive/列表裡的Anaconda版本(注意不同的Anaconda版本對應不同的Python版本以及整合包裡的各packages版本),選擇合適的版本如Anaconda3-2019.10-Linux-x86_64輸入如下命令:
wget https://repo.continuum.io/archive/Anaconda3-2019.10-Linux-x86_64.shbash Anaconda3-2019.10-Linux-x86_64.sh按提示步驟即可完成Anaconda整合環境在WSL下的安裝。
Python開發IDE選擇如果把開發IDE和程式碼編輯器作為一起考慮,首選PyCharm+VSCode+Jupyter Notebook的開發方式來進行資料科學的資料探索工作,他們各自有各的優勢:
Jupyter Notebook便於互動式想法試驗適用於樣本資料探索和模型試驗VSCode便於簡單程式碼編輯PyCharm整合環境便於工程專案debug開發所以作為資料科學綜合開發環境,選擇分別安裝Jupyter Notebook、VSCode和PyCharm來進行程式碼編輯、debug測試、原型試驗和專案開發。
Jupyter Notebook互動式開發安裝好Anaconda後在WSL就可以啟動Jupyter Notebook了:
jupyter notebook # 執行jupyter
命令提示給出的連結即可在Win10瀏覽器裡開啟,就可以開始Jupyter Notebook的開發實驗了:
當然程式碼檔案的儲存也是在WSL裡剛開啟Jupyter的目錄裡,而WSL其實可以和Win10目錄共享訪問,其目錄是在/mnt/c對應Win10的C盤目錄。
VSCode程式碼編輯VSCode作為輕量級程式碼編輯器是十分輕便優秀的,使用VSCode編輯Python程式碼需要連線WSL環境下的Anaconda和Python,需要配置讓VSCode配合WSL開發環境執行起來
1.安裝VSCode,下載地址https://code.visualstudio.com/
2.在VSCode中安裝Code Runner外掛和Remote-WSL外掛(如下圖所示),外掛裝好後右上角會有一個三角形圖示,這個就是Code Runner編譯執行程式的按鈕
3.把VSCode的預設終端從Power Shell改成為WSL。在VSCode介面按F1會彈出一個搜尋框,輸入Open Settings(JSON)回車就到設定介面,在設定介面中填入
"terminal.integrated.shell.windows":"C:\\\\Windows\\\\System32\\\\wsl.exe",4.設定外掛Code Runner。由於Code Runner預設的設定是為Windows準備的,所以必須把這些在Windows下的編譯程式碼改成linux下的編譯程式碼。方法同上一步,在Open Settings (JSON)中加入以下程式碼:
{ "code-runner.clearPreviousOutput": true, "code-runner.ignoreSelection": true, "code-runner.runInTerminal": true, "code-runner.saveAllFilesBeforeRun": true, "code-runner.executorMap": { "cpp": "g++ $fileName -lpthread -lboost_system -lboost_filesystem -o $fileNameWithoutExt && ./$fileNameWithoutExt", "python": "python3 -u ./$fileName"},設定儲存後,整個VSCode對接WSL環境就搭建完成了,下方的Terminal裡面就是Ubuntu終端。如果程式碼要編譯,則點選一下右上Code Runner那個三角形按鈕,就可以編譯並運行了。
PyCharm專案開發PyCharm常用於專案型別的開發,相比VSCode的程式碼編輯功能強大更多,相比Jupyter Notebook的互動式方式更像一種解釋編譯執行的整合式IDE。使用WSL在PyCharm需配置遠端直譯器,完成對接在Linux環境的開發。
1.開啟Add Python Interpreter對話方塊。在Windows下配置路徑為File | Settings,在左邊區域裡點選WSL,例如下圖所示配置Interpreter的路徑:
2.如果已經在具體專案中,也可以通過路徑File | Settings | Project <project name> | Project Interpreter點選配置圖示選擇Add後,再配置選擇合適的Python直譯器,並會列出其預設的庫包版本如下圖所示:
點選ok配置完成後,就可以在PyCharm裡開發專案,並基於Linux環境除錯程式碼,所開發程式碼可以更順利部署在Linux線上服務環境,當然如果希望DevOps更加一體化,可以考慮使用docker來完成開發環境的部署打包,這就需要WSL+docker的協同操作,這裡因為WSL有些許限制還是需要配合Win版docker進行如有需要下回再展開介紹討論。
結語至此,我們搭建了便於資料實驗的一體化資料科學開發環境,完成了基於WSL的Jupyter Notebook/VSCode/PyCharm的程式碼開發環境配置,可以更好的支援Python程式碼的開發以完成資料分析、模型訓練、調參調優等一系列的迭代開發debug等工作,希望所介紹內容對大家實踐資料科學實驗有所幫助。
參考資料
Win10+WSL+VS Code搭建Ubuntu開發環境 https://zhuanlan.zhihu.com/p/57882542基於SSH除錯的WSL+PyCharm配置方式 https://zhuanlan.zhihu.com/p/49227132Configure a remote interpreter using WSL https://www.jetbrains.com/help/pycharm/using-wsl-as-a-remote-interpreter.html