メインコンテンツへスキップ

AndroidスマホでPythonを書く:Termux Python開発環境の構築

·
カテゴリー スマートフォン Termuxチュートリアル
タグ Python Android Termux
目次

Androidスマートフォンアプリ「Termux」でPythonプログラムを書く方法と、Ivon個人の経験を少し共有します。

AndroidスマートフォンでPythonを書くためのアプリは、使いにくいものが少なくありません。純pythonで書かれたパッケージしかインストールできず、wheelに出くわすと止まってしまいます。おそらく目的は、本格的なPython開発環境を作ることではなく、Duolingoのように初心者が練習する場に近いのでしょう。

その中で、Termuxだけは進化を続けています。pip installは今でも通常のLinux環境と100%同じようには動きませんが、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でPythonを動かすか、proot-distroで動かすか?
#

PythonはTermuxで直接動かすことも、proot-distroでDebian環境を作成してからその中で動かすこともできます。

この2つは何が違うのでしょうか。TermuxのPythonパッケージはTermux環境向けにコンパイルされたもので、ネイティブ性能で動作します。ただしTermuxは標準的なLinux環境ではないため、一部のPythonパッケージは使えないことがあります。

一方proot-distroはLinuxシステムに近い環境なので、その中でPythonをインストールすると互換性がよくなります。またDebianのパッケージリポジトリには既製のPythonパッケージが多く、pip wheelに依存しなくて済みます。ただしproot-distroの実行性能は遅くなります。

この記事ではTermux環境を中心にします。

3. TermuxにPythonをインストールする方法
#

  1. Termuxをインストールします。

  2. Pythonとpipをインストールします。Python-venvモジュールも含まれます。

pkg install python3 python-pip
  1. 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.pypython3.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環境はPCの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ファイル管理を参照してください。

  1. プロジェクトディレクトリを作成し、使用するPythonプログラムを同じディレクトリにまとめることをおすすめします。
mkdir project1

cd project1
  1. (任意)ここでPython仮想環境を作成し、システムパッケージから隔離します。
python3 -m venv venv

source ./venv/bin/activate
  1. Pythonプログラムファイルを作成します。
touch main.py
  1. Vimでそのファイルを編集します。
vim main.py
  1. 簡単なHello Worldコードを入力します。
print("Hello World!")
  1. プログラムを実行します。結果が出力されるはずです。
python3 main.py

8. グラフィカルIDEでPythonを書く
#

ここでの操作にはキーボードとマウスを推奨します。

グラフィカルIDEでプログラムを書けば、コマンド入力の手間を省けます。

グラフィカルIDEといえば、多くの人はVS Codeを思い浮かべるでしょう。残念ながら、Termuxにはcode-serverパッケージしかなく、デスクトップ版VS Codeはありません。

Termuxはcode-serverパッケージを提供しており、スマートフォンのブラウザでWeb版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 pythonwhich 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

関連記事


最後までお読みいただきありがとうございます。本サイトでは公開コメント欄を設けていません。私はソーシャルな反応やアクセス数を追い求めるためではなく、自分の考えを誠実に探求するために文章を書いています。記事を丁寧にお読みいただいたうえで、ご感想やご意見をお寄せいただければ幸いです。誤字・誤り・技術的な問題などを見つけた場合、またはフィードバックを共有したい場合は、Aboutページに記載しているメールアドレスまでお気軽にご連絡ください。