現在工作用的程式語言是 python,開發環境是 Linux Debian 10 的一個遠端、多人共同開發的工作站(Workstation),執行環境是 python 的 venv 虛擬環境,PC 跑的 IDE 用的是微軟 vscode,某次我在 IDE 的右下角處注意到一個很小很小的 x 符號,點開後 IDE 提示有 pylint 跟 black formatter 異常,當時不影響我的開發工作就把這事就忘了。在某天的部門分享會上,同事說他 IDE 升級後出現了一樣的錯誤,手上程式碼沒有 pylint black-format 檢查上不了 gitlab,我又點開了那個很小很小的 x 符號,裡面 logs 提示的解決方式是升級 python 3.8 或以上。
在多人一起開發的工作站升級 python 這種主要程式比較複雜,用管理員權限(sudo)升級最快但會影響其他人的開發環境,釐清需求後我想要不影響整體最低限度升級自己的 venv 的虛擬環境,實現多個版本的 venv 虛擬環境做到有多個不同 venv 虛擬環境版本可以切換。
這裡需要提一下 python venv 虛擬環境的運作方式,venv 是一個 python 模組,用這個模組啟動的 python 會在系統上建立一個「乾淨」的 python 執行環境。在系統提示下執行 python3 -m venv .venv 指令,系統會 clone 一份對應版本的 python 執行環境到指定的 .venv 資料夾內,接著執行 source .venv/bin/activate 指令可以啟動 venv 虛擬環境,用 python --version 可以檢查虛擬環境版本是 3.7.3 與系統版本一致。當我們要開發的專案程式需要搭配不同 python 套件組合很適合開多個 venv 虛擬環境來切換進行調適,用 venv 虛擬環境開發最大好處是不會汙染系統的 python 環境,不小心玩壞掉直接砍掉 .venv 目錄即可心裡沒負擔。
(附上 venv 相關指令)
$ python3 -m venv .venv # 使用模組 venv 建立虛擬環境,虛擬環境的工作目錄是 .venv
$ source .venv/bin/activate # 啟動 venv 虛擬環境,成功啟動後會自動在系統提示字元會附加 (.venv)
(.venv) $ python --version # 檢查 python 版本
(.venv) $ pip install -r requirement.txt # 安裝這個 venv 環境所需的 python 套件(requirement.txt)
(.venv) $ deactivate # 退出 venv 虛擬環境
所以要在 Local 端不影響系統環境的狀態下升級 python 3.8 以上的版本,更適合的的處理方式是從 Python 網站拉原始碼下來自己編譯,再用編譯出來的新版本 python 來建立 venv 虛擬環境。目標是在自己的帳號底下建立新版本的 python,從下載到編譯按照以下方法,換成其他版本做法一樣。
$ cd ~/ # 先切到自己的 Home 目錄
$ wget https://www.python.org/ftp/python/3.8.17/Python-3.8.17.tar.xz # 用 wget 下載 Python 原始碼
$ tar zxvf Python-3.8.17 # 解壓縮
$ cd Python-3.8.17 # 切換目錄
$ ./configure —enable-optimizations # 建立編譯用組態檔
$ make -j 4 # 編譯程式
$ python --version # 檢查版本,看到 python 3.8.17 成功
$ python -m venv .venv3817 # 用新的 python 建立 venv 環境
完成 python 升級後的 IDE 不再報錯了。
從結果回顧升級過程並不困難,比較困難的是過程中釐清自己需求的跟找到適合自己的方法、然後親自去嘗試。如果你的狀況剛好跟我很接近,是在多人開發的 Linux 工作站、專案需求需要多個版本的 python venv 來調適且需要升級新版本來讓 IDE 的 pylint, black formatter 運作正常的話,不妨直接套用或在這個基礎上打造屬於你的升級方法。