😎

Termuxでpythonを使う

に公開

https://zenn.dev/dameyodamedame/articles/937421d81b5949

上記の記事の詳細記事です。

日本では最初に教えるプログラミング言語をScratchにしている場合も多いようですが、Termux環境は基本CLIなので、動作しません。なのでここでは最初にPythonを選択します。

Pythonをインストールする

~ $ pkg install python

インストール中に何か聞かれたら⏎すればOKです。勝手にデフォルトの選択肢が適宜選ばれます。

エディタでPythonのプログラムを書く

nanoを使ってloop.pyという名前のファイルを以下の内容で作成します(vimで作る場合はnanoコマンドをvimコマンドにすればOKです)。

~ $ nano loop.py
loop.py
for i in range(10):
    print(f'{i+1}回目')

Pythonのプログラムを実行する

~ $ python loo.py
1回目
2回目
3回目
4回目
5回目
6回目
7回目
8回目
9回目
10回目
~ $

なんてことなく動きますよね

Pythonの学習について

ここでPythonの全てを紹介するつもりはありません。教材はインターネット上のモノやAIに頼りましょう。Googleアカウントが必要になりますが、内容的には以下のいずれかがオススメです。

https://www.python.jp/train/index.html
https://utokyo-ipp.github.io/

どちらもGoogle Colabを利用するので、Termuxを使わずブラウザからPythonを使うような感じになります。AndroidだとTABが押せなくて困るので、CodeBoard Keyboard for Codingなどで補助するといいでしょう。

Jupyter lab

Google Colabはオンライン(インターネットアクセスがある状態)でないと使えません。誰もが常時オンライン環境とは限らないので、オフラインでもほぼ同じことをTermux上で実現する手段を用意してみました。Jupyter labというやつです。Google Colabの実体は先の説明リンクで示したとおり、ただのJupyter Notebookの実行環境なので、自分で用意することも可能なのです。

1. jupyter labのインストールと起動

~ $ pkg install -y build-essential libzmq rust python
~ $ pkg install -y patchelf # zmq用
~ $ pkg install -y libjpeg-turbo # Pillow用
~ $ pkg install -y matplotlib git
~ $ mkdir jupyter
~ $ cd jupyter
~/jupyter $ python -m venv env
~/jupyter $ . env/bin/activate # 毎回必要
((env) ) ~/jupyter $ python -m pip install -U pip
((env) ) ~/jupyter $ pip install jupyter jupyterlab-language-pack-ja-JP
((env) ) ~/jupyter $ pip install Pillow matplotlib
((env) ) ~/jupyter $ patchelf --add-needed libpython3.12.so ./env/lib/python3.12/site-packages/zmq/backend/cython/_zmq.cpython-312.so # 毎回必要
((env) ) ~/jupyter $ PYTHONPATH=$(python -c "import sys;print(':'.join(sys.path))";echo -n ":/data/data/com.termux/files/usr/lib/python3.12/site-packages") jupyter-lab # 毎回必要。--ip='*' を付けるとPCのブラウザからでも見れる
...(ここで出力されるURLをブラウザに貼り付ける)
((env) ) ~/jupyter $ patchelf --remove-needed libpython3.12.so ./env/lib/python3.12/site-packages/zmq/backend/cython/_zmq.cpython-312.so # 毎回必要
((env) ) ~/jupyter $ deactivate # 毎回必要
~/jupyter $ 

※pip installのタイミングでビルドが入ることがあり、とても時間がかかります。動かないから固まったと思わず、何分でも待ちましょう。

jupyter-labコマンドを実行した際に表示されるURLをブラウザに貼り付けることで、オフラインでGoogle Colabのような機能を使うことができます。初回起動時は英語だと思いますが、メニューからSettings>Language>Japanese(Japan)-日本語(日本)を選択すると日本語になります。

ブラウザ画面

2. jupyter labの停止

ブラウザの画面でメニューからシャットダウンを選択するか、Termux上でCtrl+Cを行い、質問にYすることで停止できます。

3. 次回以降の起動

コメントに毎回必要と書いているコマンドを毎回打ち込む必要があり、面倒なので、以下のようなスクリプトを用意しました。

jupyter.sh
. env/bin/activate
patchelf --add-needed libpython3.12.so ./env/lib/python3.12/site-packages/zmq/backend/cython/_zmq.cpython-312.so
PYTHONPATH=$(python -c "import sys;print(':'.join(sys.path))";echo -n ":/data/data/com.termux/files/usr/lib/python3.12/site-packages") jupyter-lab # --ip='*' を付けるとPCのブラウザからでも見れる
patchelf --remove-needed libpython3.12.so ./env/lib/python3.12/site-packages/zmq/backend/cython/_zmq.cpython-312.so
deactivate

これを使うと次回以降は以下のように起動できます。

~/jupyter $ sh jupyter.sh

llama-cpp-pythonを使ってみる

一通りPythonの学習が終わったら、Pythonの得意分野でもある計算系の処理でもしてみましょう。今回はスマホでLLMをしてみます。あまり大きなモデルを使っていませんが、それでも1.9GBくらいはあるので、それなりのスペックのスマホでなんとか動くというレベルです。

しかし動くかどうかの確認のためにも、一応用意させてもらいました。

https://github.com/abetlen/llama-cpp-python
https://huggingface.co/unsloth/Qwen3-4B-GGUF

1. 実行環境構築

~ $ mkdir -p python/llama_example
~ $ cd python/llama_example
~/python/llama_example $ python -m venv env
~/python/llama_example $ . env/bin/activate
((env) ) ~/python/llama_example $ python -m pip install -U pip
((env) ) ~/python/llama_example $ pip install llama-cpp-python huggingface-hub

foo.py
from llama_cpp import Llama
import time

llm = Llama.from_pretrained(
    repo_id="unsloth/Qwen3-4B-GGUF",
    filename="Qwen3-4B-Q3_K_S.gguf",
    verbose=False
)

while True:
    q = input('質問: ')
    if q == '終了':
        break
    s = time.perf_counter()
    output = llm(
          f"質問: {q}\n",
          max_tokens=1024,
          stop=["質問:", "\n"],
          echo=False
    )
    e = time.perf_counter()
    print(f'({e-s:.2f}[秒])')
    print(output["choices"][0]["text"])

2. 実行

((env) ) ~/python/llama_example $ python foo.py
llama_context: n_ctx_per_seq (512) < n_ctx_train (40960) -- the full capacity of the model will not be utilized
質問: LLMを上手に使うコツを教えてください。
(65.86[秒])
回答: 1. 極力自然な日本語で話して、LLMが理解しやすいように、文の構造をシンプルにしてください。2. その場その場の状況を具体的に説明してください。3. 重要な情報を先に伝えてから、背景や詳細を追加してください。4. 過去の会話や上下文を活用してください。5. あなたの意図を明確にし、LLMがその意図を正確に理解できるよう、指示を明確にしてください。6. 長文は避け、段階的に話してください。7. 使 いたい言葉がなければ、新しい単語や専門用語は使わず、毎回同じ卂数語で説明してください。
質問: 終了
((env) ) ~/python/llama_example $

※初回はモデルのダウンロード約1.9GBが入るので、Wi-Fiなどの環境で行ってください

こんな感じで、スマホでもローカルLLMが動きます。使用しているモデルが中国製なので、たまに不思議な漢字になるのは御愛嬌です。

質問する際に「終了」と打ち込めば終わります(普通にCtrl+Cでも止まる)

3. 後始末

((env) ) ~/python/llama_example $ deactivate
~/python/llama_example $ 

4. 最後に

実用上は2025年5月現在Gemini2.0が無料かつ認証なしで使えるので、知りたいことがあるなら基本はそちらを使えばいいでしょう。せいぜいネットがないところでエセ翻訳をしたいときなどに使えるかもしれないくらいです(foo.pyはダウンロード機能があるので、ネットに繋ぎにいきますが、Llama()を使ってローカルのキャッシュにあるモデルファイルを直接読めばネットに繋ぎにいきません)。まあ仕組みを理解する前にまずは自分で動かす経験は大事かもしれません。LLMの使い方を覚えるだけならわざわざやる必要はないかもです(簡単なので)。

GitHubで編集を提案

Discussion