hmPython3 インストール出来ても使えないライブラリ

概要

前節でhmPython3へのモジュールのインストール方法を紹介しましたが、
ここでは、「ライブラリによっては、hmPython3では使えない」ということが説明されています。

「numpy」や「pythonnet」は使えない

hmPython3は、その性質上、
1つのプロセス内で、プロセスを終了することなく、
「複数回」実行する必要
があります。

しかも複数回実行する度に、実行状態(環境のスコープ状態)を初期化する必要があります。

最初からPythonに付属しているライブラリについては、原則、この複数回の初期化に対応していますが、
サードパーティ製のライブラリについては、この「複数回の初期化」に対応していないものがあります。

元々複数回の初期化に対応していない「numpy」や
1回実行すると、ガベージコレクト任せなため、解放までに時間がかかってしまう「pythonnet」などがこれに該当します。

失敗することの確認。Package Indexを探す

numpyのPackage IndexのURLは

となります。

自分のバージョンにマッチする、Wheelファイルのダウンロード

  • 通常の秀丸エディタの場合

    hmPython3 x86 版は、Python3.8.7ですので、

    対象のnumpyのPackageは

    • numpy-1.18.1-cp38-cp38-win32.whl

    がダウンロード対象となります。

  • 秀丸エディタ 64bit版 を特別に使ってる人の場合

    もしも、秀丸エディタ 64bit版を使っているなら、hmPython3 x64 版で、Python3.8.2となりますので、
    numpyのPackage Indexは

    対象のnumpyのPackageは

    • numpy-1.18.1-cp38-cp38-win_amd64.whl

    がダウンロード対象となります。

PythonDev.batのバッチファイルが用意されている

hmPython3には秀丸フォルダのサブディレクトリの「HmPython3」フォルダ内に、
「PythonDev.bat」が用意されており、これを利用することで、
「パスが通っていないPythonに一時的にパスを通し、少し楽にコマンドを打つことが出来るようになっています」

PICTURE

直接「pip.exe」を使うのではなく、python -m経由で使う必要あり

他の正規インストールをしたPythonが存在すると、「pip」コマンドを直接使うと、
そちらのPythonへとインストールされてしまいます。

これを避けるには、以下のように「python -m」を先頭につけて、
どのPythonへとインストールするのかを明示するコマンドを入力しましょう。

  • 通常の秀丸エディタの場合

    PythonDev.bat実行の中でのコマンド
    python -m pip install numpy-1.18.1-cp38-cp38-win32.whl
            
  • 秀丸エディタ 64bit版 を特別に使ってる人の場合

    PythonDev.bat実行の中でのコマンド
    python -m pip install numpy-1.18.1-cp38-cp38-win_amd64.whl
            

1回目の動作確認

TestNumPy.mac
#DLL = loaddll( hidemarudir + @"\hmPython3.dll" );

#r = dllfuncw( #DLL, "DoString", "import testnumpy");

freedll( #DLL );
testnumpy.py
 from hmPython import hm
import numpy as ns

arr = ns.asarray([1,2,3])
hm.debuginfo(arr)

2回目の動作確認

1回目は無事実行出来ますが、2回実行すると、
秀丸が不正終了してしまうことがわかります。

numpyは「プロセスが継続した状態」で複数回の「Python環境の初期化」に対応していないためです。

どうすればよいのか?

hmPython3からアウトプロセスとしてPythonを起動し、
「インプロセス」と「アウトプロセス」で連携することで、対処してください。

サンプル例を、hmPythonとアウトプロセスPython連携に掲載しています。