[記錄] WSL 1 開發 Python

  • 1114
  • 0
  • 2020-11-22

這幾年陸陸續續有開 VM 跑 Ubuntu 及 Windows 使用 Python 的嘗試,整體上來說都有些卡手,而不能持續下去。

像是 VM 的網路設定、記憶體及硬碟空間配置、Windows 複製的指令貼不進 VM、UI 卡頓等等,與其說是學 Linux,更像是在學 VM 和打字練習。

2020 上半年,在專案上使用 WSL 1 (當時 WSL 2 還只有先行版)開發 Python,覺得蠻順手的,很少花時間在 Python 撰寫以外的問題。

這篇算是以 Linux 新手的角度,記錄一些心得。

安裝

照微軟的安裝文件(連結),一步步執行即可,以 WSL 1 為例,只要在 PowerShell 下指令啟用 WSL。

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

打開 Winows Store 安裝任一 Linux 發行版,我當時是選 Ubuntu 18.04 LTS(記得約 200 MB),在商店中 Launch Ubuntu,設置用於 WSL 的帳號密碼。

以上,便完成 WSL 1 安裝,WSL 2 步驟會再多一些。

比起之前在電腦安裝 VM 軟體(只是選 Hyper-V、VirtualBox、VMware 就要想一陣子),下載 2 GB Ubuntu 映像檔,建立 VM 實體時的種種設定,真的方便太多了。

連接終端

WSL 版 Ubuntu 沒有圖形介面,透過文字終端操作。打開的方法很多。

1.Windows Terminal

微軟官方推的終端,整合 PowerShell、CMD、WSL 等,可分頁同時運行、分割視窗等,詳情可見官網(連結)

安裝方法也很簡單,在 Winows Store 搜尋 Windows Terminal 安裝即可。

打開 Winows Termianl 的新分頁選項會看見可使用的 WSL  項目。

2.PowerShell

Win10 自帶的 CommandLine 工具,直接呼叫 wsl 指令即可

3.CMD

Windows 命令提示字元,直接呼叫 wsl 指令即可

4.打開 Ubuntu

直接打開 Winsows Store 下載的發行版

像我一個不熟 Linux 的 Windows 使用者,會對文字介面稍感不安。但後面操作下來,發現 GUI 的事情 Windows 來做就足夠了。

指令

Ubuntu 上要安裝東西,一般都能透過 apt-get 指令完成,套件官網一般也都會附上 apt-get install 指令,非常方便。

建議在第一次使用 Ubuntu 時,先下指令更新套件清單、現有套件

sudo apt-get update
sudo apt-get upgrade

在 WSL 中會需要熟悉幾個命令

# 進入 Windows c 槽,這行重點
cd /mnt/c

# 到上一層資料夾
cd ..

# 進入本層資料夾 xxx
cd xxx

# 印出現在絕對路徑
pwd

# 印出本層的檔案、資料夾
ls

# 隱藏一併印出,因為 . 開頭的檔案 Linux 預設不顯示
ls -a

雖然還有很多 Linux 指令,像 touch mkdir rm mv 等檔案增、刪、移的基本指令,但 WSL 的情境下,不是絕對必要。

像是專案需要版控,不一定要學 git、svn 的指令,在 WSL 中移動到 Windows 自己習慣的資料夾位置進行開發,就可以在 Windows 用自已熟練的工具進行版控。

Visual Studio Code

使用 WSL 真的不能錯過 VSCode(連結),在 Windows 安裝 VSCode 加上 WSL,有魔法般的效果。

當需要修改 WSL 中的檔案時,只要 Windows 有安裝最新版 VSCode,就可以在 WSL 用 code . 指令讓 VSCode 遠端打開當前資料夾進行編輯

本圖是 Windows 的 VSCode 遠端到 Ubuntu 修改 .zshrc 檔,這時候增刪修檔案、資料夾都可輕鬆透 GUI 操作完成,VSCode 的 Terminal 也能操作 WSL Bash ,在開發中就不用頻繁切換視窗了

當然也可以使用 Vim 來修改,學起來蠻有趣,推一個互動教學網站(連結),後來熟悉後,小修改直接開 Vim 也很方便。

雖然 Vim 有趣,但 Vim 是有學習曲線的,剛開始時如果要中斷作業先去學 Vim,就不有趣了。

Python

Ubuntu 系統預載 Python3,因為很多好用的工具是基於 Python 的。我直接使用它建 venv(虛擬環境 連結)進行開發,並沒有什麼問題。

如果會交替在 WSL 和 Windows 進行開發或測試,記得分別建置不同的 venv,因為是不通用的,連叫用方式都一些小差異。

因為網路環境相通,Python Flask on 一個 3000 port 的網站,在 Windows Chrome 直接開 localhost:3000 就可以測了。

目前經驗 Python 的開發環境相比 Windows,在 Linux 下確實比較完善。

我是在 WSL 下確認專案可行,再轉到 Windows 進行調整(因為要架到 IIS 上),結果發現一些數學領域的 Python Library 在 Ubuntu 安裝就只是一行指令,但在 Windows 就要去找對應的 .whl 下載來放,但 whl 檔名必須寫死 Python 及 CPU 版本的規則,讓套件相依匯出 requirements.txt 時,顯得很個人化,不太適合團隊直接使用。

感想

對於 Linux 新手來說,使用 WSL 你不會發生戰鬥力驟降的悲劇,隨著時間推移,在純 Linux 環境你也能操作自如。(這是什麼推坑神器)

WSL 確實整合地很好,它讓人使用 Linux 但又和 Windows 相通,不用大量更換原本已熟悉的工具和技能。這不會妨礙你去深入學習 Linux,逐步去切換使用的工具,進而學習如何操作 Linux。

以 Python 經驗來說,先切到 WSL 進行最初的開發,看到效果再轉到 Windows 解決那些只屬於 Windows 的問題。畢竟切換的成本很低,所以我在整個開發過程中切換了很多次。先看到效果,心情會比較好,也比較有信心。

現在 WSL 2 已正式釋出,使用特化的 Hyper-V 運行 Linux,因為是 VM 有點擔心啟動速度,實測發現還是非常快速,以後應該會完全轉到 WSL 2,而 WSL 1 的操作經驗完全可以套用。