時には立ち止まってみるのもいいよ

仕事の合間の息抜き。やってることは仕事と同じ。

python embedded で Portable な Python/numpy/matplotlib 環境つくるお

Portableな Python 環境がほしいなー

ということで、Python embeddedというのを試してみました!

 

公式ドキュメント 

4. Windows で Python を使う — Python 3.11.0b5 ドキュメント

 

VCランタイムをインストール

公式ドキュメントにある通り、VCランタイムが必要ですので入れときます。

開発環境ならすでに入ってる可能性大ですが、配布時には必要になるので忘れないように。

Latest supported Visual C++ Redistributable downloads | Microsoft Learn

 

Python Embeddedをダウンロード

python公式サイト(Python Releases for Windows | Python.org)あたりから

  Windows embeddable package (64-bit)

てのをダウンロードします。現時点で最新の3.11 じゃないのは

↓ここら辺を参考にさせていただきました m(_._)m

www.kkaneko.jp

 

zip展開後の準備
    1. ダウンロードしたZIPを D:\python3.10-emb に展開します
    2. python310._pthファイルをエディタで編集します

      # Uncomment to run site.main() automatically
      import site    # <-- ここのコメントを外す

 

import site を有効にすることで自動的に site.main() が実行されます。

site.main()は公式ドキュメントによると

モジュール検索パスに標準のサイト固有ディレクトリを追加します。

とあるので、ZIPを展開したパスを「サイト固有ディレクトリ」として追加するために必要なもの、ということのようです。

 

pipのインストール

pipの公式(?)

GitHub - pypa/get-pip: Helper scripts to install pip, in a Python installation that doesn't have it.

より、get-pip.py スクリプトを入手して実行します。

 

Windowscurlだと -sSL はエラーになるのでオプションなしで。

PS D:\python3.10-emb> curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

PS D:\python3.10-emb> .\python.exe get-pip.py

 なんやかんやあって
Successfully installed pip-22.3 setuptools-65.5.1 wheel-0.38.2

おk

 

numpyとかインストール

PS> .\python.exe -m pip install numpy matplotlib

 

PyTorch CPU版なら

PS> .\python.exe -m pip install torch torchvision

とか。

これで学習用には十分かな

 

と思ってちょろっと確認してみたら、、matplotlib が動きませんでした。。orz

 UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
  plt.show()

 

色々調べたところ、matplotlibで描画するにはGUIにアクセスするBackendが必要で、インストーラPython には標準で入っているtkinterがEmbeddedには無いのが原因らしいです。。(Embeddedに含まれてない理由は不明。。Tcl/Tkのライセンスの問題?)

 

Usage — Matplotlib 2.0.2 documentation

を見るとほかのBackendも使えるようなので切り替えることにします。

 

WxPythonを使う

バックエンドモジュールはいくつかあるようですが、ドキュメントにも少し記載があったwxpythonをインストールすることにします。pipでinstallするだけ。

PS> .\python.exe -m pip install wxpython

 

次に、Lib\site-packages\matplotlib\mpl-data にある matplotlibrc ファイルを編集して、matplotlibのバックエンドを変更します。

##backend: Agg      # <-- こんなのがあるところに ↓これを追加
backend: WxAgg

 

これでmatplotlib で図が表示できるようになりました! わーい。

 

ちなみに matplotlibrc を編集したくない場合は、ソース中に

impot matplotlib as mpl
mpl.use('WxAgg')

のようなコードを最初に入れておくとバックエンドを指定できます。

 

Sandboxで確認してみる

とりあえずテスト環境として Windows Sandbox を使って動作を確認してみます。

  1.  Sandbox起動
  2.  D:\python3.10-emb を ZIPで固めたやつをSandboxにコピーして展開
    (フォルダを直接コピーもできるけど、ファイル数が多くてめちゃ時間がかかる)
  3. VCランタイムのインストール
  4. あとはお好みでw
    numpy+matplotlibがちょろっと動くことは確認できました!

PyTorchとか本格的なものは試せていませんが、足りないものはpipで入れていけば動くんじゃないかと。。