這是一位生命科學學生如何從零開始安裝 WSL,學習 Python 與 Linux 的第一集。
在勉強利用 ChatGPT,以及自己對程式碼的一點直覺完成了大學生的專題實驗後,我在未來碩士班老師的引薦之下,利用長達八個星期的寒假,撥出六個星期到竹北的新竹生物醫學園區進行實習;就在我一如往常,準備開啟我的 Windows 筆電工作時,卻在公司的徵才網站上看到對正式員工的基本要求:「精熟 Linux 相關系統、Docker 容器、Python 程式碼」,並且「能獨立解決問題,並與開發團隊合作」。
我看到這段的當下,驚覺自己與業界的距離之遠。當時我其他分頁都還是問 ChatGPT 一些 Class 類別設計、讀取 json 檔案的方法等最基礎的問題,更別說是能獨立解決複雜的程式碼效能問題;對於 Windows 的系統環境也只是外行人的程度,更別說是精通其他系統架構;連自己的 Python 程式碼架構都無法完全講好,更別說是與開發團隊進一步合作。意識到這些的我,在實習結束之後,即刻就去書店買了一本跟 Python 有關的書籍,並就碩士班老師的研究領域,回頭查詢我可能會需要哪些 Python 套件。
本來以為還能繼續待在 Windows 舒適圈的我,在意識到 pysam(一個處理DNA序列資料的 Python 套件)根本沒有支援 Windows 的穩定版本,但以後分析實驗室裡的序列資料都必定需要它的當下,整個人慌得像熱鍋上的螞蟻,因為根據我的經濟情況,根本不可能只是為了這個套件,再買一臺 MacBook 或者原生 Linux 相關系統的電腦。於是一如既往,我就去問問 ChatGPT 該怎麼解決;這時它的回答,跳出了一個我從來不認識的詞:Windows 下的 Linux 子系統(Windows subsystem for Linux, WSL)。
「這是類似在 Windows 底下再安裝一個系統嗎?」、「在那個子系統裡面安裝 pysam時,它真的會判讀為 Linux-64,然後繼續安裝嗎?」我充滿好奇,深夜兩三點仍不眠不休,一步步照著指示完成安裝,成功在 Linux 子系統中建構 Python 虛擬環境,下載並執行了 pysam。當時我還不知道,這個操作只是我日後學習之路的序章而已。
在安裝好這個子系統,並使用 pysam 成功下載第一個定序檔案之後,我本來以為事情就這麼告一段落了,卻不知道接下來我會遇到的難題,有如唐僧遇到的九九八十一難。
首先是儲存空間爆掉。我的系統硬碟原本就只有 512GB,下載幾個定序資料後竟直接消耗掉數十 GB。只好自掏腰包買了 1TB 外接硬碟,學習將 WSL 移轉到外部空間。
接著,因為 WSL 裡面有我另外安裝的 MySQL 資料庫,以前我並沒有意識到要將其完全關閉,再登出 WSL ,於是每次都是寫好程式碼後,直接從 Windows 端把 WSL 登出並關機。時間一久,不只資料庫裡面的資料,連系統檔案都因為這樣不停毀損,甚至之前匯出的 WSL 備份檔案也包含毀損的系統套件,在冬天的寒冷中奮戰了一整個晚上後,最後那個 WSL 系統還是只能整個刪除重灌,連帶著我之前的虛擬環境、定序資料,全部都刪掉了。為了把那些資料重新弄回來,我又花了三天的時間。
最後這個最讓我印象深刻;當時我為了解決它時不時就自動轉進唯讀模式的問題(那時我還沒意識到其實外接硬碟本身已經怪怪的了),於是試著寫了一個腳本來偵測它是否即將進入唯讀模式;為了模擬它可能進唯讀模式的情境,並確認腳本有無正確運作,我就直接在 WSL 還沒登出時,拔掉外接硬碟,還重複好幾次。最後,當我要繼續工作時, Windows 忽然跟我報告 I / O 讀寫錯誤,怎麼嘗試都沒有辦法讀取外接硬碟的檔案,整顆硬碟因此壽終正寢。
最後,我別無選擇,只能又花了一些費用買新的硬碟;以及幾天的睡眠時間,從頭到尾地完成 Python、 MySQL、 pysam 安裝,把我之前的東西全部恢復成原樣。到這場險境結束時,我已經足足花了半個月的時間,一個人憑著自己的幹勁,默默地在 ChatGPT 的協助下處理這些事;但是透過這次排除萬難的過程,卻也讓我學到很多。
從這些災難中浴火重生的我,因此學會更好的外接硬碟使用習慣、如何備份與還原 WSL、怎麼撰寫簡單的 Linux 腳本、面對系統錯誤時該從哪裡開始排查等知識與技能。除此之外,也讓我更確信,學寫程式與使用 Linux 對一位生物科學學生來說,不只是輔助工具,而是一條全新的視野與解決問題的路。
如果喜歡這個系列,請喜歡這篇文章;每一個喜歡,都是我繼續分享這些故事的動力。
下集預告:當我第一次用 t-SNE 畫出基因圖:一場與記憶體打架的資料之旅 - 學會用 Python 做生物資訊視覺化,我經歷了什麼?