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

  • 概要

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

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

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

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

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

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

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

    numpyのPackage IndexのURLは

    となります。

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

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

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

      対象のnumpyのPackageは

      • numpy-1.13.1-cp36-none-win32.whl

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

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

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

      対象のnumpyのPackageは

      • numpy-1.13.1-cp36-none-win_amd64.whl

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

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

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

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

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

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

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

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

      PythonDev.bat実行の中でのコマンド
      python -m pip install numpy-1.13.1-cp36-none-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連携に掲載しています。