よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

AndroidにF-Droid版TermuxとPython3.10を再インストールした(2021年12月

この投稿で行う事

  • Googleプレイ版Termuxのアンインストール
  • F-Droidのインストール
  • F-Droid版Termuxのインストール
  • Python3.10のインストール
  • Numpy、Pandas、lxml、Pillow、Jupyter Notebook、Scipy(失敗)、その他、依存ライブラリのインストール



実行環境



TermuxをGoogleプレイ版からF-Droid版に変更する

AndroidスマホGoogleプレイからTermuxというターミナルアプリを入れて使っていたのですが、pkg updateなどでパッケージの更新をしたら起動時に以下のような警告が出るようになった。

You are likely using a very old version of Termux, probably installed from the Google Play Store. There are plans in the near future to remove the Termux apps from the Play Store so that new users cannot install them and to disable them for existing users with app updates to prevent the use of outdated app versions. Instead, you are encouraged to move to F-Droid or Github sources (see [1]). You can backup all your current Termux data before uninstallation and then restore it later by following instructions in the wiki [2]. Check the changelog [3] for all the new features and fixes that you are currently missing. Check [4] for why this is being done.

[1] https://github.com/termux/termux-app#installation [2] https://wiki.termux.com/wiki/Backing_up_Termux [3] https://github.com/termux/termux-app/releases [4] https://github.com/termux/termux-app#google-play-store-deprecated

Google翻訳)
非常に古いバージョンのTermuxを使用している可能性があります。 おそらくGooglePlayストアからインストールされます。 近い将来、削除する計画があります PlayストアのTermuxアプリで、新しいユーザーが それらをインストールして無効化することはできません 使用を防ぐためにアプリを更新している既存のユーザー 古いアプリのバージョンの。 代わりに、あなたは F-DroidまたはGithubソースに移動することをお勧めします ([1]を参照)。 現在のすべてのTermuxをバックアップできます アンインストール前のデータを後で復元する wiki [2]の指示に従ってください。 チェック すべての新機能と修正の変更ログ[3] あなたが現在行方不明であること。 理由については[4]を確認してください これは行われています。

[1] https://github.com/termux/termux-app#installation [2] https://wiki.termux.com/wiki/Backing_up_Termux [3] https://github.com/termux/termux-app/releases [4] https://github.com/termux/termux-app#google-play-store-deprecated



2021年12月現在、Googleプレイにはまだ「Termux」アプリは置いてありますが、訳あって近々置かなくなる予定のようです。前々から告知されてはいましたけど。
Googleプレイから無くなる換わりに、F-Droidgithubからダウンロードして使うのをオススメされている。

そういう訳ですので、Installing from F-Droid - Termux Wikiに従い、

  1. GoogleプレイからインストールしたTermuxをアンインストールし、
  2. F-DroidからTermuxとTermux:APIを再インストールしてF-Droid版のTermuxに切り替えました。



↑のリンクにあるように、GoogleプレイからとF-DroidからとのTermuxは互換性の問題があり、混ぜるなキケンだそうです。
それらのTermuxのバージョンは異なります。

Termuxのバージョン確認方法

# Termuxのバージョン確認コマンド

$ termux-info

このコマンドか、またはAndroidのアプリの設定の所で確認できる。F-Droid版Termuxをインストールするとversion0.117になる。Googleプレイ版はversion0.101で、2020年9月から更新されていない。



混ぜるなキケンということで、GoogleプレイからインストールしたTermuxをアンインストールすると、

  • aliasの設定とか
  • 自作アプリをCLIツールでインストールして使っていたのとか
  • TermuxでインストールしたパッケージやらPythonやらライブラリやら

は全部失くなります。SDcard等にバックアップすることも可能です。だが、私はやりませんでした。元々入っていたAndroidアプリ等は消えませんので、そこは大丈夫です。



ところで、F-Droidって何ですの?

Androidアプリは通常Googleプレイストアのアプリを使ってダウンロード・インストールするかと思いますが、F-Droidというアプリを使って(または直接)そのサイトに置いてあるアプリ(野良アプリなどと呼ばれる)をダウンロード・インストールする事もできるようです。

F-DroidはAndroidに対応したソフトウェアリポジトリおよびアプリケーションストアである。Google Playと機能は類似するが、扱っているのはフリーかつオープンソースのソフトウェアのみである。配信アプリケーションはF-Droidのウェブサイトで見ながらインストールできるが、クライアントアプリケーション(Google Playストアからは入手できない)から直接インストールする方法もある。クライアントアプリケーションはインストールしたF-Droid配信アプリケーションを自動的に更新することも出来る。また、ウェブサイトでは全配信アプリケーションのソースコードがダウンロードできるようになっている wikipedia F-Droid - Wikipedia



F-Droid公式
F-Droid - Free and Open Source Android App Repository
F-Droidアプリはここからブラウザでダウンロード・インストールする。
Androidのアプリの設定⚙️項目に「不明なアプリのインストール」というのがあります。Googleプレイ以外からインストールするアプリ(自作アプリも含む)を「不明なアプリ(野良アプリ)」という。

ダウンロード・インストールする際に使用するブラウザの「不明なアプリのインストール」設定を「許可する」に変更しておく。方法の詳細Installing from F-Droid - Termux Wikiを参照下さい。



行った手順

  1. TermuxアプリとTermuxAPIアプリを「Googleプレイ・ストア」アプリでアンインストール
  2. F-Droidアプリをインストールした。81.8MB。ブラウザの不明なインストールを許可して行う事。インストールが完了するとアイコンが作られる。
  3. F-Droidを開くと、リポジトリ更新が始まる(データのダウンロード等で1~2分)
  4. F-Droidアプリの「開発」ジャンルから「Termux」と「TermuxAPI」をインストール。不明なアプリインストール可で行う。

  5. F-Droidの公式サイトからF-Droidアプリをインストール

f:id:chayarokurokuro:20211216193223j:plain



f:id:chayarokurokuro:20211216193341j:plain



f:id:chayarokurokuro:20211216193417j:plain



ここまでの手順で無事にF-DroidからTermuxアプリのインストールが完了すると、Googleプレイストア版と同じアイコンが作られる。

ここから後はTermuxのセットアップをしていく。



Termuxのセットアップ

まずはパッケージを更新する

# パッケージの更新
$ pkg update

$ pkg upgrade 



内部ストレージへのアクセス準備

この時点ではAndroidの内部ストレージにアクセスできない状態です。試しに$ lsコマンドなどで見てもファイルやフォルダが表示されません。
次のコマンドでアクセス可能にする。

~$  termux-setup-storage #内部ストレージにリンク

f:id:chayarokurokuro:20211215030155j:plain

許可する。これで内部ストレージにアクセス可能になったはず。確認してみよう。

~$ ls storage
dcim       movies  pictures
downloads  music   shared

f:id:chayarokurokuro:20211215030806j:plain

$ ls storage/shared/を見ればAndroidのファイル管理アプリで見えるフォルダが表示される。これでアクセス可能になりました。



必要なパッケージやソフトウェアをpkg install

適当にインストールしていきます。

  • tree : ディレクトリ構成表示ソフト
  • wget : ダウンロード用
  • curl : ダウンロード用
  • vim : 高機能エディタ
  • git : gitコマンド用
  • termux-api : Termuxの拡張機能
  • proot : termux-chrootでpermissionを変更する時に必要らしい

とりあえずこれだけやってみる。

~$ pkg install tree wget curl vim git  termux-api proot

termux-apiはTermuxの拡張機能を使う時に必要。たとえばtermux-clipboard-setコマンドなどクリップボードを使う時。重宝する。F-Droidアプリから「Termux:API」アプリをインストールしておく。

インストール済みのパッケージ確認

Termuxで何のパッケージをインストールしたか確認したい時は

$ pkg list-installed

パッケージ名 バージョン [installed]
の一覧がズラリと表示される。

インストール済み以外も表示

まだインストールしていないパッケージも表示できる。

$ apt list

# または
$ pkg list-all

大量に表示される。インストール済みは右側に[installed]と表示。



Termuxでインストールできないソフトも別のLinux(Ubuntuなど)をインストールする事で可能になったりするようです。
参考 【随時更新】個人的 Termuxセットアップメモ



Pythonのインストール

2021年12月現在の最新版はPython3.10です。

TermuxでUbuntuDebianなどのLinuxを入れて使っておられる方が結構いるようですが、Androidスマホの容量的に厳しそうなので直接入れました。

Python本体のインストール

$ pkg install python

66.6MBのダウンロード、Python3.10.1がインストールされた。



Pythonの外部ライブラリのインストール

pandasやscipy、matplotlibなどはサクッとpipインストール出来ない。機種によってもどうやら反応が違う。鬼門であります。

まずはpipの最新版へアップデート

$ pip install -U pip



Jupyter Notebookをインストール

$ pip install wheel jupyter notebook

wheelは自動的にインストールされないのか分からないが「wheel not installed」と警告が出るので先にインストールした。

しかしpyzmqがインストール失敗と出た。その為Jupyter Notebookもインストール失敗。
検索すると次の手順で行けると。

$ pkg install libzmq # 先にインストール

$ pip install pyzmq  # 次にインストール

無事インストールできたようなので、再び

$ pip install jupyter notebook

無事、インストール成功。



Numpyのインストール

$ pip install numpy

すんなりインストール成功。

scipyのインストール

$ pip install scipy

これではインストール出来ない。前回成功した方法を試す。

# curlコマンドでコンパイル用のシェルスクリプトをダウンロード
$ curl -LO https://its-pointless.github.io/setup-pointless-repo.sh

# シェルスクリプトを実行
$ bash setup-pointless-repo.sh

何か色々インストールされる。その後に、

$ pkg install scipy  # pip installの打ち間違いではありません。

前回はこれでscipyが動くようになった。インストールされたか確認する。

$ pkg list-installed |grep scipy
scipy/termux,now 1.6.3 aarch64 [installed]

インストールできている。
しかし、 Pythonを起動させてインポートしても「No Module named 'scipy'」と言われた。

$ python
Python 3.10.1 (main, Dec  9 2021, 15:28:13) [Clang 12.0.8(略)

>>> import scipy
ModuleNotFoundError: No module named 'scipy'

ありゃ、前回はこれで動いたんだけどなぁ。分からないのでscipyは一旦諦めて次に進みます。



追記 2021.12.17
インストール失敗の原因として、Error installing scipy in Python 3.10 on Windows10 - Stack Overflowによると、scipyがまだPython3.10に対応できていない為らしい。Windowsでもインストールできないと書いてある。
追記以上



Pillowのインストール

グラフ描画ライブラリmatplotlibをインストールする際に同時にPillowもインストールされますが、大抵Pillowは失敗する。
よって、次の手順でPillow単体のインストールを行いました。

$ pkg install libjpeg-turbo  #先にインストール

$ LDFLAGS="-L/system/lib64/" CFLAGS="-I/data/data/com.termux/files/usr/include/" pip install Pillow

これで上手く行った。
参考 python - How to install Pillow on termux? - Stack Overflow



lxmlのインストール

先に依存パッケージをインストールしてから。

$ pkg install libxml2 libxslt

$ pip install lxml

成功。



matplotlibのインストール

先に依存パッケージのインストールから。

$ pkg install freetype libjpeg-turbo libpng

$ pip install matplotlib

これで失敗したので、次のようにした。

$ git clone https://github.com/matplotlib/matplotlib

$ cd matplotlib

$ sed 's@#enable_lto = True@enable_lto = False@g' setup.cfg.template > setup.cfg

$ pip install .

さらに失敗した。コンパイルが上手く行っていないんだろう。検索しても方法が出てこないが、とりあえずgcc関連をインストールしまくれば行けるんじゃね?と思い、

# 先にインストール
$ pkg install gcc-10 gcc-11
 
# 上がインストールできたので、改めて
$ pip install matplotlib

なんと、インストール出来た!!やったね👌

上のgit cloneコマンドでダウンロードして作られたmatplotlibフォルダは必要ないので削除して構いません。

# git cloneしたmatplotlibフォルダの存在確認
$ ls
matplotlib 

# あれば、フォルダごと削除
rm -rf ./matplotlib

# 削除できたか確認
$ ls

# matplotlibフォルダが無くなっていればOK



Pandasのインストール

インストールに時間がかなり掛かる。15分以上。

$ export CFLAGS="-Wno-deprecated-declarations -Wno-unreachable-code"     

$ pip install pandas

これで上手く行った。



参考リンク

  • F-Droidについて





  • 失敗しやすいPythonライブラリのインストール方法


情報が古いかも。



以上です。