SPSS Modelerの拡張ノードでPythonを使ってみます。
@1000aki さんがSPSS Modelerの拡張ノードでPythonを利用する ①セットアップと可視化
の記事を書いていらっしゃいて、ここではPython+pipで環境を準備されています。この組み合わせの方がミニマムでパッケージの管理ができますし、PATH設定の面倒もなく手堅いのですが、Condaによるパッケージ管理を使いたいケースもあります。
この記事ではconda環境でSPSS Modelerの拡張ノードを使いたいと思います。
■テスト環境
SPSS Modeler 18.2.2
Windows 2019
Python 3.7.7
1. miniconda の導入
condaはAnaconda Individual Edition(Anaconda Distribution)で導入することが多いと思いますが、今回はミニマムな環境作成を行いたいので、minicondaで導入したいと思います。
1. miniconda Python 3.8のインストーラーのダウンロード
以下のリンク先より、Python 3.8 Miniconda3 Windows 64-bitのインストーラーをダウンロードします。
https://docs.conda.io/en/latest/miniconda.html
2. miniconda3 インストーラーの実行
Install forはここでは"All Users"にしました。"Just Me"で構成することも可能です。
Destination Folder を控えておきます。例では、C:\ProgramData\Miniconda3です。
3. conda環境の作成
Modeler 18.2.2で使えるPythonが3.7.7ですし、他の環境と分ける方が望ましいので、専用のConda環境を作ります。
また、私が試した環境ではどうもAnaconda Public Repositoryのscipyなどがうまく動きませんでしたので、conda-forgeからパッケージを入手して環境を作りたいと思います。
modelerというenvironmentをPython 3.7.7、Conda-forgeからのパッケージで作ります。
conda config --append channels conda-forge
conda create -c conda-forge -n modeler python=3.7.7 conda
conda activate modeler
(base) C:\Users\dsuser01>conda config --append channels conda-forge
(base) C:\Users\dsuser01>conda create -c conda-forge -n modeler python=3.7.7 conda
Collecting package metadata (current_repodata.json): done
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: done
## Package Plan ##
environment location: C:\Users\dsuser01\.conda\envs\modeler
added / updated specs:
- conda
- python=3.7.7
The following packages will be downloaded:
package | build
---------------------------|-----------------
brotlipy-0.7.0 |py37hcc03f2d_1001 368 KB conda-forge
ca-certificates-2020.12.5 | h5b45459_0 173 KB conda-forge
certifi-2020.12.5 | py37h03978a9_1 143 KB conda-forge
cffi-1.14.5 | py37hd8e9650_0 226 KB conda-forge
chardet-4.0.0 | py37h03978a9_1 215 KB conda-forge
conda-4.9.2 | py37h03978a9_0 3.0 MB conda-forge
conda-package-handling-1.7.2| py37h6dbccfb_0 710 KB conda-forge
cryptography-3.4.6 | py37h20c650d_0 709 KB conda-forge
idna-2.10 | pyh9f0ad1d_0 52 KB conda-forge
menuinst-1.4.16 | py37hc8dfbb8_1 95 KB conda-forge
openssl-1.1.1j | h8ffe710_0 5.8 MB conda-forge
pip-21.0.1 | pyhd8ed1ab_0 1.1 MB conda-forge
pycosat-0.6.3 |py37hcc03f2d_1006 102 KB conda-forge
pycparser-2.20 | pyh9f0ad1d_2 94 KB conda-forge
pyopenssl-20.0.1 | pyhd8ed1ab_0 48 KB conda-forge
pysocks-1.7.1 | py37h03978a9_3 28 KB conda-forge
python-3.7.7 | h81c818b_4 14.3 MB
python_abi-3.7 | 1_cp37m 4 KB conda-forge
pywin32-300 | py37hcc03f2d_0 6.9 MB conda-forge
requests-2.25.1 | pyhd3deb0d_0 51 KB conda-forge
ruamel_yaml-0.15.80 |py37hcc03f2d_1004 277 KB conda-forge
setuptools-49.6.0 | py37h03978a9_3 931 KB conda-forge
six-1.15.0 | pyh9f0ad1d_0 14 KB conda-forge
sqlite-3.35.2 | h8ffe710_0 1.2 MB conda-forge
tqdm-4.59.0 | pyhd8ed1ab_0 77 KB conda-forge
urllib3-1.26.4 | pyhd8ed1ab_0 99 KB conda-forge
vc-14.2 | hb210afc_4 13 KB conda-forge
vs2015_runtime-14.28.29325 | h5e1d092_4 2.3 MB conda-forge
wheel-0.36.2 | pyhd3deb0d_0 31 KB conda-forge
win_inet_pton-1.1.0 | py37h03978a9_2 8 KB conda-forge
wincertstore-0.2 |py37h03978a9_1006 15 KB conda-forge
yaml-0.2.5 | he774522_0 61 KB conda-forge
------------------------------------------------------------
Total: 39.0 MB
The following NEW packages will be INSTALLED:
brotlipy conda-forge/win-64::brotlipy-0.7.0-py37hcc03f2d_1001
ca-certificates conda-forge/win-64::ca-certificates-2020.12.5-h5b45459_0
certifi conda-forge/win-64::certifi-2020.12.5-py37h03978a9_1
cffi conda-forge/win-64::cffi-1.14.5-py37hd8e9650_0
chardet conda-forge/win-64::chardet-4.0.0-py37h03978a9_1
conda conda-forge/win-64::conda-4.9.2-py37h03978a9_0
conda-package-han~ conda-forge/win-64::conda-package-handling-1.7.2-py37h6dbccfb_0
cryptography conda-forge/win-64::cryptography-3.4.6-py37h20c650d_0
idna conda-forge/noarch::idna-2.10-pyh9f0ad1d_0
menuinst conda-forge/win-64::menuinst-1.4.16-py37hc8dfbb8_1
openssl conda-forge/win-64::openssl-1.1.1j-h8ffe710_0
pip conda-forge/noarch::pip-21.0.1-pyhd8ed1ab_0
pycosat conda-forge/win-64::pycosat-0.6.3-py37hcc03f2d_1006
pycparser conda-forge/noarch::pycparser-2.20-pyh9f0ad1d_2
pyopenssl conda-forge/noarch::pyopenssl-20.0.1-pyhd8ed1ab_0
pysocks conda-forge/win-64::pysocks-1.7.1-py37h03978a9_3
python pkgs/main/win-64::python-3.7.7-h81c818b_4
python_abi conda-forge/win-64::python_abi-3.7-1_cp37m
pywin32 conda-forge/win-64::pywin32-300-py37hcc03f2d_0
requests conda-forge/noarch::requests-2.25.1-pyhd3deb0d_0
ruamel_yaml conda-forge/win-64::ruamel_yaml-0.15.80-py37hcc03f2d_1004
setuptools conda-forge/win-64::setuptools-49.6.0-py37h03978a9_3
six conda-forge/noarch::six-1.15.0-pyh9f0ad1d_0
sqlite conda-forge/win-64::sqlite-3.35.2-h8ffe710_0
tqdm conda-forge/noarch::tqdm-4.59.0-pyhd8ed1ab_0
urllib3 conda-forge/noarch::urllib3-1.26.4-pyhd8ed1ab_0
vc conda-forge/win-64::vc-14.2-hb210afc_4
vs2015_runtime conda-forge/win-64::vs2015_runtime-14.28.29325-h5e1d092_4
wheel conda-forge/noarch::wheel-0.36.2-pyhd3deb0d_0
win_inet_pton conda-forge/win-64::win_inet_pton-1.1.0-py37h03978a9_2
wincertstore conda-forge/win-64::wincertstore-0.2-py37h03978a9_1006
yaml conda-forge/win-64::yaml-0.2.5-he774522_0
Proceed ([y]/n)?
-------中略-----------
done
#
# To activate this environment, use
#
# $ conda activate modeler
#
# To deactivate an active environment, use
#
# $ conda deactivate
(base) C:\Users\dsuser01>
作成したmodelerの環境に切り替えます。
プロンプト頭に(modeler) が入ります。
conda info -e
conda activate modeler
(C:\ProgramData\Miniconda3) C:\Users\dsuser01>conda info -e
# conda environments:
#
base * C:\ProgramData\Miniconda3
modeler C:\Users\dsuser01\.conda\envs\modeler
(C:\ProgramData\Miniconda3) C:\Users\dsuser01>conda activate modeler
(modeler) C:\Users\dsuser01>
numpyを試しに導入してみます。
conda install -c conda-forge numpy
(modeler) C:\Users\dsuser01>conda install -c conda-forge numpy
Collecting package metadata (current_repodata.json): done
Solving environment: done
## Package Plan ##
environment location: C:\Users\dsuser01\.conda\envs\modeler
added / updated specs:
- numpy
The following packages will be downloaded:
package | build
---------------------------|-----------------
intel-openmp-2020.3 | h57928b3_311 2.0 MB conda-forge
libblas-3.9.0 | 8_mkl 3.9 MB conda-forge
libcblas-3.9.0 | 8_mkl 3.9 MB conda-forge
liblapack-3.9.0 | 8_mkl 3.9 MB conda-forge
mkl-2020.4 | hb70f87d_311 172.4 MB conda-forge
numpy-1.20.1 | py37hd20adf4_0 5.2 MB conda-forge
------------------------------------------------------------
Total: 191.3 MB
The following NEW packages will be INSTALLED:
intel-openmp conda-forge/win-64::intel-openmp-2020.3-h57928b3_311
libblas conda-forge/win-64::libblas-3.9.0-8_mkl
libcblas conda-forge/win-64::libcblas-3.9.0-8_mkl
liblapack conda-forge/win-64::liblapack-3.9.0-8_mkl
mkl conda-forge/win-64::mkl-2020.4-hb70f87d_311
numpy conda-forge/win-64::numpy-1.20.1-py37hd20adf4_0
Proceed ([y]/n)?
Downloading and Extracting Packages
numpy-1.20.1 | 5.2 MB | ############################################################################ | 100%
liblapack-3.9.0 | 3.9 MB | ############################################################################ | 100%
intel-openmp-2020.3 | 2.0 MB | ############################################################################ | 100%
libcblas-3.9.0 | 3.9 MB | ############################################################################ | 100%
libblas-3.9.0 | 3.9 MB | ############################################################################ | 100%
mkl-2020.4 | 172.4 MB | ############################################################################ | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
(modeler) C:\Users\dsuser01>
作成した環境のパッケージを確認します。
作成した2021/2/26の時点では以下のバージョンでパッケージがそろえられました。Python3.7.7だけはconda-forgeになかったようでAnaconda Public Repositoryから取得し、それ以外はconda-forgeから取得できていました。
conda list --show-channel-urls
(modeler) C:\Users\dsuser01>conda list --show-channel-urls
# packages in environment at C:\Users\dsuser01\.conda\envs\modeler:
#
# Name Version Build Channel
brotlipy 0.7.0 py37hcc03f2d_1001 conda-forge
ca-certificates 2020.12.5 h5b45459_0 conda-forge
certifi 2020.12.5 py37h03978a9_1 conda-forge
cffi 1.14.5 py37hd8e9650_0 conda-forge
chardet 4.0.0 py37h03978a9_1 conda-forge
conda 4.9.2 py37h03978a9_0 conda-forge
conda-package-handling 1.7.2 py37h6dbccfb_0 conda-forge
cryptography 3.4.6 py37h20c650d_0 conda-forge
idna 2.10 pyh9f0ad1d_0 conda-forge
intel-openmp 2020.3 h57928b3_311 conda-forge
libblas 3.9.0 8_mkl conda-forge
libcblas 3.9.0 8_mkl conda-forge
liblapack 3.9.0 8_mkl conda-forge
menuinst 1.4.16 py37hc8dfbb8_1 conda-forge
mkl 2020.4 hb70f87d_311 conda-forge
numpy 1.20.1 py37hd20adf4_0 conda-forge
openssl 1.1.1j h8ffe710_0 conda-forge
pip 21.0.1 pyhd8ed1ab_0 conda-forge
pycosat 0.6.3 py37hcc03f2d_1006 conda-forge
pycparser 2.20 pyh9f0ad1d_2 conda-forge
pyopenssl 20.0.1 pyhd8ed1ab_0 conda-forge
pysocks 1.7.1 py37h03978a9_3 conda-forge
python 3.7.7 h81c818b_4 defaults
python_abi 3.7 1_cp37m conda-forge
pywin32 300 py37hcc03f2d_0 conda-forge
requests 2.25.1 pyhd3deb0d_0 conda-forge
ruamel_yaml 0.15.80 py37hcc03f2d_1004 conda-forge
setuptools 49.6.0 py37h03978a9_3 conda-forge
six 1.15.0 pyh9f0ad1d_0 conda-forge
sqlite 3.35.2 h8ffe710_0 conda-forge
tqdm 4.59.0 pyhd8ed1ab_0 conda-forge
urllib3 1.26.4 pyhd8ed1ab_0 conda-forge
vc 14.2 hb210afc_4 conda-forge
vs2015_runtime 14.28.29325 h5e1d092_4 conda-forge
wheel 0.36.2 pyhd3deb0d_0 conda-forge
win_inet_pton 1.1.0 py37h03978a9_2 conda-forge
wincertstore 0.2 py37h03978a9_1006 conda-forge
yaml 0.2.5 he774522_0 conda-forge
(modeler) C:\Users\dsuser01>
このmodeler環境のPATHを確認します。
echo %PATH%
(modeler) C:\Users\dsuser01>echo %PATH%
C:\Users\dsuser01\.conda\envs\modeler;C:\Users\dsuser01\.conda\envs\modeler\Library\mingw-w64\bin;C:\Users\dsuser01\.conda\envs\modeler\Library\usr\bin;C:\Users\dsuser01\.conda\envs\modeler\Library\bin;C:\Users\dsuser01\.conda\envs\modeler\Scripts;C:\Users\dsuser01\.conda\envs\modeler\bin;C:\ProgramData\Miniconda3\condabin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Windows\System32\OpenSSH;C:\Program Files\ibm\gsk8\lib64;C:\Program Files (x86)\ibm\gsk8\lib;C:\PROGRA~1\IBM\SQLLIB\BIN;C:\PROGRA~1\IBM\SQLLIB\FUNCTION;C:\PROGRA~1\IBM\SQLLIB\SAMPLES\REPL;C:\Program Files\Amazon\AWSCLIV2;C:\Users\dsuser01\AppData\Local\Microsoft\WindowsApps;.
このPATHからminiconda関係のPATHが必要になります。システムやユーザーのPATHに加えることもできますが、なるべく環境に影響を与えないために、これらのPATHをセットしてからModelerを起動するバッチを作っておきます。
set Path=C:\Users\dsuser01\.conda\envs\modeler;C:\Users\dsuser01\.conda\envs\modeler\Library\mingw-w64\bin;C:\Users\dsuser01\.conda\envs\modeler\Library\usr\bin;C:\Users\dsuser01\.conda\envs\modeler\Library\bin;C:\Users\dsuser01\.conda\envs\modeler\Scripts;C:\Users\dsuser01\.conda\envs\modeler\bin;C:\ProgramData\Miniconda3\condabin;%PATH%
start "" "C:\Program Files\IBM\SPSS\Modeler\18.2.2\bin\modelerclient.exe"
2. SPSS Modeler用に 独自の Python インストール済み環境を指定
メモ帳などで options.cfg を開きます。options.cfgの更新にはOSの管理者権限が必要です。
options.cfg のデフォルトのパスは下記です。
C:\Program Files\IBM\SPSS\Modeler\18.2.2\config\options.cfg
eas_pyspark_python_path にconda info -eで得られた C:\Users\dsuser01.conda\envs\modelerの python.exe のパスを指定し、上書き保存します。パスの区切り文字はバックスラッシュ(円マーク)を重ねるか、スラッシュに変更します。
# Set to the full path to the python executable (including the executable name) to enable use of PySpark.
eas_pyspark_python_path, "C:<python_install_location>/python.exe"
# Set to the full path to the python executable (including the executable name) to enable use of PySpark.
eas_pyspark_python_path, "C:/Users/dsuser01/.conda/envs/modeler/python.exe"
3. SPSS Modelerでの動作確認
作成しておいたmodeler1822conda.batでModelerを起動します。
以下のサンプルストリームを実行してみます。
特に
- Pythonのバージョン
- python.exeのパス
- numpyのバージョン
が作成したmodelerのconda環境のものと一致するかを確認してください。
4. Modeler Serverでの設定
Modelerクライアントであれば上記のバッチで起動することができますが、Modeler Serverはそうはいきません。システムの環境変数にバッチの中に書いたPATHを設定する必要があります。他にPythonの環境があるとその優先順位によって参照先が変わりうるので、注意してください。
5. サンプルファイル
options.cfg
conda環境のpython.exeをeas_pyspark_python_pathに設定したoptions.cfgです。
modeler1822conda.bat
conda環境へのPATHを通してからModelerクライアント起動するbatファイルです。
pythontest.str
pythonやnumpyのバージョンを出力するテスト用のストリームです。