【経緯】簡易版:Androidのブラウザで実現するpython環境の紹介について
以前に紹介しておりましたTermuxをベースとしたjupyterlab環境について、Termuxをupgradeすると、pythonのバージョンまで上がってしまい、元のpython環境を再現できなくなってしまったようです。。
参考リンク:Termux Wiki
【一部内容を転載します】
Warning: upgrading major/minor version of Python package, for example from Python 3.8 to 3.9, will make all your currently installed modules unusable. You will need to reinstall them. However upgrading patch versions, for example from 3.8.1 to 3.8.2, is safe.
Due to our infrastructure limits, we do not provide older versions of packages. If you accidentally upgraded to unsuitable Python version and do not have backups to rollback, do not complain! We recommend doing backups of $PREFIX for developers and other people who rely on specific software versions.
今回の紹介について
以前紹介したproot化ubuntuベースのpython環境構築のブログから、GUI環境設定部分を省略した内容となっています。もしAndroid端末のメモリに余裕(4G以上)があれば、そのまま以下のリンクで紹介している環境構築をお薦めします。
具体的には、Termuxにproot化ubuntuをインストールし、そこに隔離されたpythonの仮想環境を設定して、各種ライブラリをインストールしていくところまでを紹介しています。Termux(を介したproot化ubuntu)ターミナルからjupyterlabを起動して、Androidのブラウザから、ほぼ同等のpythonプログラミング環境を用意することが可能です。
ubuntu(linux)環境やpythonプログラミング、AIや機械学習に興味ある方が、一通りの作業を楽しみながら気楽にスタートするきっかけになれば、とてもうれしいです。もちろん手持ちのAndroid端末を限界まで使い倒したい方や、キーボードデバイスを愛している方にとっても、ポジティブなトピック提供になったら幸いです。
F-DroidからTermuxをインストール、Termuxにproot化ubuntuをインストール
参考リンク
UDEMY : Linux(ubuntu)環境を学びたい方へのリンク 現役シリコンバレーエンジニアが教える NeoVim(VIM) + Tmux + Zsh 入門F-DroidからTermuxを入手
Termuxにproot化ubuntuをインストール
Termuxインストール後の私の環境でのコマンド進行を記載させて頂きます。
$ pkg update -y
$ pkg upgrade -y
$ termux-setup-storage
$ pkg install proot -y
$ pkg install proot-distro -y
$ proot-distro install ubuntu
ubuntu環境へログイン
$ proot-distro login ubuntu
ubuntu環境からのログアウト(Termux環境へ戻る)
root$ exit
$
ubuntu環境:設定(時刻など)
root$ apt update
root$ apt upgrade -y
root$ apt install locales -y
root$ apt install vim -y
root$ vim /etc/locale.gen
ja_JP.UTF-8のコメントアウト(#)を外す
root$ locale-gen
root$ update-locale LANG=ja_JP.UTF-8
root$ apt install tzdata
6 アジア
79 東京
Termux上での作業環境へのパス
root$ cd /data/data/com.termux/files/home
ubuntu環境:ユーザーの作成
python環境構築を見据え、ユーザーを作成しておきます。
ユーザーの作成
root$ adduser cosmo
「cosmo」はユーザー名です。パスワード設定を要求されるので、設定してください。
またuseraddコマンドでもユーザー作成できますが、ホームディレクトリが作成されないので、adduserコマンドにて実施してください。
sudoコマンドのインストール
ユーザー環境下でインストール作業など、root権限をもって実行できるようにsudoコマンドをインストールします。rootユーザーにて、以下のコマンドを実行していきます。
root$ apt install sudo -y
sudo権限の付与
sudoグループにユーザーを追加します。確認は、catコマンドで実行できます。
root$ gpasswd -a cosmo sudo
root$ cat /etc/group | grep sudo
root$ visudo
cosmo ALL=(ALL:ALL) ALL # この内容を追記(cosmoはユーザー名)
こちらで、Termuxを再起動すれば、sudo権限が付与されると思いますが、ちょっと記憶が定かでないので、作業が足りなかったら、ごめんなさい^_^;
作成したユーザーに移る
root$ su cosmo
cosmo$
rootユーザー(スーパーユーザー)に戻る
cosmo$ exit
root$
メンテナンス用シェルスクリプトの作成
以下のようなコードをもつapt_maintenance.shを作成します。
cosmo$ vim apt_maintenance.sh
#!/bin/bash
#最新のアップデートを確認
sudo apt-get update
#最新のアップデートを適用
sudo apt-get -y upgrade
#ディストリビューションを最新のものに更新
sudo apt-get -y dist-upgrade
#依存関係解決後に使われなくなったパッケージを削除
sudo apt-get -y autoremove
#作業時のaptキャッシュを削除します。キャッシュ(/var/cache/apt/archives)が肥大化することを防止
sudo apt-get -y autoclean
実行権限を付与します。
cosmo$ chmod 755 apt_maintenance.sh
以下のコマンドで実行します。
cosmo$ ./apt_maintenance.sh
ubuntu:ユーザー環境:隔離されたpython仮想環境の作成
作成したユーザー環境下にて、以下のコマンド進行で、必要なものをインストールして、python v.3.10.2をインストールしました。
cosmo$ sudo apt -y update
cosmo$ sudo apt -y install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
cosmo$ cd /tmp
cosmo$ curl https://pyenv.run | bash
cosmo$ echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.bashrc
cosmo$ echo 'if [ -d "${PYENV_ROOT}" ]; then' >> ~/.bashrc
cosmo$ echo ' export PATH=${PYENV_ROOT}/bin:$PATH' >> ~/.bashrc
cosmo$ echo ' eval "$(pyenv init -)"' >> ~/.bashrc
cosmo$ echo ' eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
cosmo$ echo 'fi' >> ~/.bashrc
cosmo$ exec $SHELL -l
cosmo$ pyenv install 3.10.2
python仮想環境のインストール
「py3102」という名前の仮想環境を作成します。
cosmo$ pyenv shell 3.10.2
cosmo$ python -m venv ~/py3102
python仮想環境を起動
cosmo$ source ~/py3102/bin/activate
py3102$
起動を簡単にするために、エイリアスを作成しておきます。
cosmo$ cd ~
cosmo$ vim ~/.bashrc
alias py3102='source ~/py3102/bin/activate' # エイリアスを追記
cosmo$ source ~/.bashrc
以降は、以下のコードにて、仮想環境を起動
cosmo$ py3102
py3102$
python仮想環境の解除
py3102$ exit
root$
参考リンク:隔離された Python 3.7 仮想環境の新規作成(ubuntuの場合)
参考リンク:pythonを学びたい方
現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルpipパッケージのインストール
py3102$ python -m pip install <パッケージ名>
インストールしたパッケージ
py3102$ python -m pip install -U pip
py3102$ python -m pip install setuptools
py3102$ python -m pip install numpy
py3102$ python -m pip install pandas
py3102$ python -m pip install matplotlib
py3102$ python -m pip install scipy
py3102$ python -m pip install scikit-learn
py3102$ python -m pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu
たまにタイムアウトのエラーが出る時がありますが、その際は何度かインストールをトライすれば、完遂できると思います。
参考リンク:pytorchのインストール
参考リンク:Pythorchを学びたい方
【PyTorch】PyTorchで実装するディープラーニング -CNN、RNN、人工知能Webアプリの構築-sudo権限が必要なpipパッケージのインストール
また、sudoコマンドから単にpythonを実行するとrootのpythonが呼び出されるようなので、仮想環境のpythonで実行するように絶対パスを指定してインストールしました。
py3102$ which python
py3102$ sudo <which pythonで表示されたパス/python> -m pip install <パッケージ名>
sudo権限でインストールしたパッケージ
現状では、localhostを使用するようなサーバー関連のパッケージのインストールにはsudo権限が必要でした。コマンド実行後、ユーザーパスワードを入力すると処理が進んでいきます。
py3102$ sudo /home/cosmo/py3102/bin/python -m pip install jupyterlab
py3102$ sudo /home/cosmo/py3102/bin/python -m pip install streamlit
たまにタイムアウトのエラーが出る時がありますが、その際は何度かインストールをトライすれば、完遂できると思います。
ubuntu:python仮想環境で実行したプログラムをAndroidブラウザで使用する
jupyterlabをAndroidブラウザで使用する
jupyterlabの起動
作業ディレクトリを作成しておきます。
py3102$ cd ~
py3102$ mkdir workspace
コマンドを起動したディレクトリが起動時のrootディレクトリになるので、作業ディレクトリに移動して、jupyterlabを起動します。
py3102$ cd ~/workspace
py3102$ jupyter lab
表示されるURL+トークンをコピーします。
Androidのブラウザを起動し、URL+トークンをペーストして、URLを開けば、そのままjupyterlabを使用できます。
URLを「ホーム画面に追加」すれば、以降はショートカットから起動できます。
jupyterlabの基本的な操作についてのみ、こちらのリンクをご参考に頂ければと思います。
参考:termux(ubuntu)環境で実行したjupyterlabをandroidブラウザで使用する
jupyterlabの制限事項
機能拡張が少し不安定です。それ以外は文句無しなんですけど。。もし解決策を知ってる方がいれば、教えてもらえるとうれしいです^_^;
とはいえ、入力補完はtabを押せばできるので通常の利用に関しては問題無いと思います。
jupyterlabの停止
jupyterlabのブラウザのメニュー「file」から「Shut Down」を選択します。
また、サーバー起動中のターミナルがアクティブな状態で「Ctrl+c」で「y」を選択しても停止できます。
streamlitをAndroidブラウザで使用する
streamlitとは、逐次的に構築できるWebフレームワークです。ただ、今回はチュートリアルの実行のみとし、詳しい使い方については、恐縮ですが割愛させて頂きます^_^;
streamlitの起動(チュートリアルの実行)
py3102$ streamlit hello
表示されるURL+トークンをコピーします。
Androidのブラウザを起動し、URL+トークンをペーストして、URLを開きます。
とても引き出しの多い、魅力的なWebフレームワークだと考えています。
streamlitの停止
サーバー起動中のターミナルがアクティブな状態で「Ctrl+c」で、「y」を選択して停止します。
参考リンク:streamlitを学びたい方
UDEMY : Steamlitを楽しく学ぶリンクまとめ
今回は、Termuxのupgradeで受けるpython環境への影響を回避する目的で、急遽、以前のブログから、一部抜粋するかたちで簡易版のpython環境構築の紹介させて頂きました。
引き続き、Android端末という、とても身近なデバイスでもアプリケーションを作ったり、データを分析して物事の理解を深めるための環境を用意できると思います。
もちろん、より本格的に厳密で複雑なことを実施するには、荷が勝ちすぎますが、それでも個人レベルでは、かなり使えるのではないかなと考えています。より大きな目的のためにも、その初動には耐えうるのでないでしょうか。
AIやアプリケーションなど、それと知らずに触れ合う機会はどんどん増えていくと思いますが、それらを使うだけでなく、作ることにも興味を持つ方が行動を起こすきっかけとなり、その方の自己表現における一助となれば幸いです。
Apendix 1:ユーザーコマンド表記の遷移のまとめ
$ # termux環境
root$ # ubuntu環境のrootユーザー
cosmo$ # ubuntu環境のユーザー
py3102$ # python仮想環境
(py3102) root$ # rootユーザーでのpython仮想環境(vscodeでの実行環境)
Apendix 2:AI、機械学習、統計解析に興味を持って下さった方への書籍リンク
発展的学びのため、プログラム実行実績のある書籍を、いくつか紹介させて頂ければと思います^_^;
書籍:アマゾンリンク
将棋の棋士である谷合廣紀先生の書籍「Pythonで理解する統計解析の基礎」です。ubuntu環境だけでなくTermux環境でもライブラリを追加することで、全てのプログラムが実行可能です^_^
ゼロつくシリーズも、ubuntu環境だけでなくTermux環境でも、全て実行可能なのですが、後半のプログラムでは、私のCosmo communicatorでの環境では、7時間以上掛かったものもあったので、コードを推考している際は、実行epoch数に注意が必要なプログラムもあります^_^;
Termux環境では、pytorchを用いる手前の2章までは実行可能でしたが、今回示したubuntu環境であれば、pytorchをインストールできるので、3章以降も実行可能だと考えています。
6章まで実行確認できました!
私のインストールしたgym==v0.25.1では、4章のMNISTのデータ形式が一部変更されていましたが、こちらは型を変更すれば問題無く実行できました。
また、gym==v0.25.1ではBreakoutは消えていたので、7章の実行は試しておりません。gym==v0.21までは、存在したという情報もあるので、興味のある方は試していただければと思います^_^
尚、一部動画保存が上手くいかないところがありましたが、実行結果は得ることができます^_^;
解決できたら、改めて情報更新したいと思います。
楽天ルーム(書籍)
Apendix 3:ハードウェアに興味を持って下さった方へのリンク
キーボードは、ネットを介した人とのコミュニケーションに必要な入力デバイスとしては、緩やかにその役割を終えつつあるかもしれません。しかし、コンピュータとのコミュニケーションには、より深いところで繋がっていくために、依然として極めて重要な役割を担っていると考えています。
私は、ポケットサイズの小さなキーボード端末が大好きで、今回のブログの内容によって昔から思い描いていた環境をほぼ再現できて、とてもうれしく思っています。
Astroslide 5GやGeminiPDAだけでなく、他のキーボード端末も同士です^_^
端末:アマゾンリンク
もちろん、タブレットなどの普通のAndroid端末でも、十分楽しめると思います。
むしろ、多くの方にとっては、そっちの方が自然なのかもしれません^_^;
コメント