Python Embeddable Python - eiichiromomma/CVMLAB GitHub Wiki
(Python) Embeddable Python
- 紛失した際の個人情報漏洩リスクが高いので,このEmbeddable Python専用のUSBフラッシュメモリを用意すること
- ドライブレターがハードコードされるのでセットアップ自体を演習室PC(またはCドライブのみのPC)で行うこと
色々と説明があるが作業は導入手順から
Embeddableとは
通常使うPythonはインストーラを使うものだが,EmbeddableなPythonはzipで配布されていて展開して使う.
従ってUSBフラッシュメモリ等で持ち歩ける状態,フォルダ内に全部が収まった状態でPCにコピーすれば直ぐシステムに組み込んで使える状態を意味している
コンセプト的にvenvは使わず,プロジェクトごとに展開したフォルダを用意する方が良い.
Windowsアプリケーションの場合はポータブル(portable)ナントカという表現の方がよく使われる.ポータブル化したアプリの配布サイトまで存在する.
※インストールのプロセスにおける安全性の検証をすっ飛ばすものなので,よく理解したうえで使う必要がある
使用媒体について
ディスクアクセスが頻発するので可能なら下記構成の方が良い.大量のパッケージをrequirements.txtで導入しようとすると2,30分かかる.
- ポータブルSSD
- NTFSでフォーマット
- NTFSの書き込みキャッシュ有効化(例えばここ)
ただし,キャッシュ有効化はマシンを変えたら都度デバイスマネージャを開いて設定する必要がある.加えて,アンマウント(Windows右下のアイコンで解除するやつ)をちゃんとやる必要がある.(※何度か使用中のエラーが出てもしつこく解除を試みるか,Windowsをシャットダウンする)
制限事項
ナントカ.pyを作ってpython ナントカ.pyで実行して使う分にはポータブルに使えるのだが,Scriptsフォルダに.exeファイルがインストールされるパッケージ(pip, ipython, jupyterなどなど)の場合,Scriptsフォルダに置かれる.exeファイルにpipでインストールしたときのpython.exeの場所がハードコードされるので,例えば
- PC1でDドライブがUSBフラッシュメモリだったときにpipでインストール
- EmbeddableなフォルダをPC2のデスクトップに置いて実行
とするとFatal error in launcher: Unable to create process using ...というエラーでコケる.
その場合はPC2では
python Scripts\pip.exe install -U pip
みたいな感じで,そのコマンドの前にどのpythonを使うか明示する必要が生じる.おまけにjupyter labなんかはjupyter-lab.exeというふうに起動オプションと使用する実行ファイル名が違う場合もある.
Windowsではドライブレターの変更が可能なので,導入前にUSBフラッシュメモリのドライブ名を滅多に使われないであろうO(オー)ドライブとかに変えてから導入し,違うマシンで使うときも差し込んだらドライブレターをOにして使えばよい(が面倒).
導入手順
起動用バッチファイル,requirements.txt,python312._pthファイルはCanvasで配布のkit.zipに含まれているので,それを展開して配置すると良い.(python312._pthは上書き)
1. ダウンロードと展開
公式配布サイトから自身のアーキテクチャおよび適切なバージョンのEmbeddableなものを選ぶ.ここでは3.12で最新のPython3.12.10のWindows embeddable package (64-bit)を選ぶ
Embeddableで適切なアーキテクチャとバージョンのアーカイブをダウンロードしてUSBフラッシュメモリに展開する.
大量のファイルが展開されるが,そのフォルダ内に
- python.exe
- python312._pth
が存在するのを確認する.python.exeがpythonの実体で,python312._pthがパッケージを参照する場所の一覧が書かれたファイルである.
エクスプローラでそのフォルダ名をgatokuに変える.(やらなくても良い)
2. 設定ファイル,バッチファイルの準備
Embeddable Pythonが有効になった状態のコマンドプロンプトを起動するバッチファイルを準備する.以下の内容をstartPy312.batとしてgatoku内に保存する.(名前はどうでもいいが.batの拡張子が重要)
@echo off
set PATH=%~dp0;%~dp0\Scripts;%PATH%
start cmd
やる事は
- python.exeのある場所にPATHを通す
- ScriptsフォルダにもPATHを通す(pipやipython, jupyterなど別途コマンドがインストールされる)
- コマンドプロンプトを起動する
で,PATHの通し方については,どの環境でも起動するように,そのバッチファイルがある場所からの相対パスを拾えるような仕込みが必要.%~dp0が「ダブルクオートなしでドライブ名とフォルダ名付きのバッチファイルの場所」を意味する.そこにScriptsフォルダがぶら下がっているので;区切りで列挙し,最後に%PATH%が変更前のPATH(色んなプログラムを呼び出せる状態)となる.
start cmdがコマンドプロンプトの起動.
次にpython312._pthをメモ帳やVS Codeなどで開き,以下のように保存.
python312.zip
.
Lib
Lib\site-packages
# Uncomment to run site.main() automatically
#import site
Lib, Lib\site-packagesが追加した行で,このファイルはパッケージを使うときに参照するフォルダの一覧を意味する.
3. pipのインストール
先程作った.batをダブルクリックしてコマンドプロンプトを起動し,以下を貼り付けてEnterで実行すると,get-pip.pyをダウンロードできる(curlコマンドでもできる).
bitsadmin /transfer gpip https://bootstrap.pypa.io/get-pip.py %CD%\get-pip.py
次にget-pip.pyを実行してpipをインストールする.
python get-pip.py
Scriptsフォルダにpip.exeがインストールされるので,
pip install -U pip
で利用可能で,pythonのお作法的に則り
python -m pip install -U pip
のようにも使える.py.exeのPython Launcherは使わない点に注意.
4. 講義用パッケージのインストール
requirements.txtをgatokuに保存してから
pip install -r requirements.txt
でパッケージが全部入る.SSDかつ書き込みキャッシュを有効にしていると10分かからずに終わるが,そうでない場合は放置しとく.
使い方
- 演習室のPCにUSBフラッシュメモリを差し込む
- 講義で配布される.ipynbファイルをgatokuの中にダウンロード
- エクスプローラでgatokuの中のstartPy312をダブルクリック
- コマンドプロンプトが開くのでjupyter-labを実行して.ipynbファイルを開く