目標
namedivider-pythonを、Windowsで実行できるようにし、Excelアドインの関数から呼び出せるようにする。
課題
- .NETから呼び出す方法
- namedivider-pythonを含めたPython実行環境を、ユーザーに配布する。
.NETから呼び出す
pythonnetを利用する。
WinPythonを利用するには、次の設定をしないといけないようです。
Using Python.NET with Virtual Environments
設定例
Runtime.PythonDLL = @"HOGE\python-3.12.0.amd64\python312.dll";
var pythonPath = @"HOGE\python-3.12.0.amd64";
Environment.SetEnvironmentVariable("PATH", $@"{pythonPath};" + Environment.GetEnvironmentVariable("PATH"));
Environment.SetEnvironmentVariable("PYTHONHOME", pythonPath);
Environment.SetEnvironmentVariable("PYTHONPATH ", $@"{pythonPath}\Lib");
PythonEngine.Initialize();
using (Py.GIL())
{
}
設定は、
C# initialize fails if a class derived from IEnumerable and IEnumerator is in global namespace
を参考にしています。
名前分割
using (Py.GIL())
{
var name = "佐藤始";
dynamic namedivider = Py.Import("namedivider");
dynamic basic_divider = namedivider.BasicNameDivider();
dynamic result = basic_divider.divide_name(name);
dynamic family = result.family;
dynamic given = result.given;
Console.WriteLine(family + " " + given); //佐藤 始
Console.ReadKey();
}
Python実行環境を、ユーザーに配布
ユーザーに、Pythonをインストールしてもらい、必要なライブラリもインストールしてもらうのはハードルが高いです。
さまざまな方法を検討し、WinPythonを利用することにしました。
WinPython
は、ポータブルとして利用できるので、フォルダごとファイルを配置するだけで、Pythonを利用できます。
何をダウンロードするか?
例えば、WinPython 2023-04 of December 7th 2023なら、Winpython64-3.11.6.0dot.exe
や、Winpython64-3.12.0.1dotb5.exe
で良いです。
解凍後、そのフォルダを適当なところに配置します。ユーザーに配布を前提にするなら、Cドライブのすぐ下あたりに配置してアドインを開発すると良いと思えます。
ライブラリのインストール
WinPython Command Prompt.exe
を実行して、pipで、必要なライブラリをインストールします。
画像の例では、最初に、pipをアップグレードしています。
次に、pip install namedivider-python
で、namedivider-python
をインストールしました。これに依存するライブラリも自動的にインストールされます。
配置の方針
そして、ユーザーに配布する時は、このフォルダ全体を指定したフォルダに配置するようにします。指定したフォルダに配置するのは、pythonnet
から呼び出しやすくするためです。
いろいろなやり方があるはずです。
今回は、Wix4でファイルを配置する方法を、試してみました。
WinPythonを、WiX4で配置する。