分享如何用Android手機APP「Termux」寫Python程式,加上一點Ivon的個人經驗。
許多Android手機寫Python的APP都很彆扭,只能安裝純python寫成的套件,碰到wheel就掛點,或許他們的目標比較像Duolingo一樣給初學者練習,而非打造嚴肅的Python開發環境吧。
這之中,只有Termux不斷在進化,雖然pip install依然無法100%像正常Linux環境一樣執行,但是越來越多套件編譯為Termux專用的版本了!透過Termux提供的Python套件,便能跑一些簡單的 Python程式,處理手機裡面的檔案。不需要Root權限。
比如,透過pip安裝Pillow,撰寫一個批次處理EXIF照片資訊的小程式。讀取手機DCIM資料夾裡面的全部照片,並依照EXIF資訊在照片上面印上日期,然後輸出到另外一個資料夾。(這個程式是真的可以用的,原始碼在此)
或者,使用Python寫成的term-image,在終端機顯示手機裡面的圖片。
1. 要用純文字還是圖形介面?#
Termux預設是純文字介面的終端機模擬器,需要打指令執行Python程式,雖然能透過Termux X11跑圖形介面,但是真的有必要嗎?
純文字為主的Python程式,只能輸出純文字內容,包含計算數字、排列星星、批次處理檔案、下載檔案等操作。要在純文字界面寫程式,就得學會使用Vim或者Emacs編輯,這是你練習純文字編輯器操作的好機會。
圖形介面的話,可以跑需要顯示視窗、繪製圖表等的Python程式。圖形界面寫程式的選擇很多樣,包含VS Code和Jupyter Notebook,不過他們會比較吃手機資源。
圖形介面並非必要。如果只是要寫小程式,不一定要用到IDE,Vim就夠了。
本文以純文字環境為主,圖形次之。
2. 要在Termux還是proot-distro跑Python?#
Python可以直接在Termux跑,或者使用proot-distro建立Debian環境之後再在裡面跑Python。
這兩個有什麼差呢?Termux的Python套件都是針對Termux環境編譯過的版本,是原生效能執行的。但是Termux並非標準Linux環境,部分Python套件可能無法使用。
至於proot-distro,環境較接近Linux系統,因此在裡面安裝Python相容性會比較好,而且Debian的套件庫有更多現成Python套件能夠使用,不需要依賴pip wheel。但是proot-distro的執行效能會比較慢。
本文以Termux環境為主。
3. Termux如何安裝Python?#
安裝Termux
安裝Python與pip,內含Python-venv模組:
pkg install python3 python-pip
- 確認Python版本,撰文當下應該是3.12
python3 --version
Python套件的執行檔完整路徑為$PREFIX/usr/bin/python3
pip install套件會安裝到$PREFIX/lib/python3.x
根據Termux Wiki資訊,因為Termux是滾動更新的,所以pkg upgrade更新的時候Python一律會跟著升級。當Python版本升級到下一個大版本之後,pip install的套件就要手動重裝。
4. 切換Python版本#
Termux因為是滾動更新的模式,所以只提供最新版本的Python套件。路徑為$PREFIX/usr/bin/python3
。pip install安裝的套件也會是對應以上Python的版本。
要如何切換Python版本?Python版本管理器「uv」雖然有Termux套件,不過功能不正常。如果打算安裝Anaconda,Termux應該是不能直接裝的,需要裝在proot-distro裡面。參見Termux proot-distro安裝Anaconda
所以剩下的辦法,就是使用TUR Repo提供的舊版Python了。Termux主套件庫沒有辦法提供舊版本Python,由TUR Repo來補它的缺。
比如現在版本是Python 3.12,需要舊版本Python 3.9就從TUR Repo裝:
pkg install tur-repo
pkg search python3
pkg install python3.9
安裝之後,請使用以下路徑來執行:$PREFIX/usr/bin/python3.9
譬如python3 main.py
會變成python3.9 main.py
要安裝特定版本的Python套件,就用python3.9 -m pip install <套件名稱>
要建立不同版本的虛擬環境的話,使用python3.9 venv -m venv
5. pip install的訣竅#
通常要使用Python外部模組,必須使用pip install套件,才可以在Python程式裡面import模組。
在安裝Python套件的時候,如果Termux套件庫有打包的(通常以python-*
開頭),就用pkg install
從Termux套件庫安裝,不行的話再用pip install
。
因為Termux環境與電腦Linux環境不完全相同,pip install有時候遇到需要wheel編譯的會失敗。所以建議使用Termux開發者打包的版本。
譬如,Pillow套件可以從Termux的套件庫安裝
pkg install python-pillow
如果需要舊版本Pillow,再考慮使用pip install安裝
pip install pillow==9.5.0
6. 安裝Vim與Python插件#
將純文字編輯器Vim打造成適合編輯Python的環境。
安裝Vim:
pkg install vim
Vim的基礎操作請上網搜尋,Termux在畫面上提供了許多快捷鍵,足夠你操作Vim打字輸入了。
Vim本身只有很基本的程式碼突顯功能,用來編輯Python程式可能稍嫌不足。所以要安裝插件補強功能。
Vim的插件非常多,如何決定要裝哪些?我認為Real Python網站的 VIM and Python – A Match Made in Heaven 這篇有非常詳盡的解釋。裡面提到的Vundle套件管理器也是可以裝在Termux環境。
不過YouCompleteMe自動補完系統需要打一些patch才能用,參閱 How to install YouCompleteMe on Termux by micjabbour
7. 基本的Python命令行執行方式#
介紹如何寫一個簡單的Python程式,然後用指令執行並輸出結果。
如果Python程式需要寫入檔案,需要了解Termux的路徑寫法,參閱Termux檔案管理。
- 建議建立專案目錄,把用到的Python程式都放在同一個目錄
mkdir project1
cd project1
- (選擇性)在這裡建立一個Python虛擬環境,與系統套件隔離
python3 -m venv venv
source ./venv/bin/activate
- 建立Python程式檔
touch main.py
- 用Vim編輯該檔案
vim main.py
- 填入簡單的Hello World程式碼
print("Hello World!")
- 執行程式,應該會輸出結果。
python3 main.py
8. 使用圖形介面IDE寫Python#
此處操作建議使用鍵盤滑鼠。
用圖形界面ide撰寫程式,省去打指令的麻煩。
說到圖形界面IDE,很多人都會想到VS Code吧。不幸的是,Termux只有code-server
套件,沒有桌面版VS Code。
雖然Termux提供code-server
套件,允許你用手機的瀏覽器跑網頁版VS Code,不過我認為既然都要用到圖形界面了,那麼用Termux X11跑一個完整的X伺服器比較好,這樣不只能開啟VS Code,還能讓Python程式使用PyQT繪製視窗。
考慮到Termux沒有收錄桌面版VS Code,建議是在proot-distro裡面安裝VS Code,然後再啟動圖形界面。
9. proot-distro裡面使用Python的注意事項#
當你執行proot-distro login
指令的時候,Termux會將自身的PATH一併掛載進去,故有時候執行python指令的時候會執行到Termux的版本,而非容器內的版本。
如何確定?使用which python
與which python3
確認Python路徑,如果不是/usr/bin/python3
那就是正在執行Termux的版本。
將以下內容加入proot-distro內的~/.bashrc
解決這個問題:
alias python=/usr/bin/python3
alias python3=/usr/bin/python3
alias pip=/usr/bin/pip
alias pip3=/usr/bin/pip3