本資料はユーザーが自作したPythonモジュール(*.py)をSpotfireに追加する方法について紹介します。
以下の3つの対応方法が考えられます。
- Pythonモジュール(*.py)を使用
- Pythonパッケージ(*.whl)を作成
- Spotfireパッケージ(*.spk)を作成
動作確認環境
- Spotfire Server 14.0 LTS
- Spotfire Analyst 14.0 LTS
- Python サービス 14.0 LTS
方法①、Pythonモジュール(*.py)を使用
直接Pythonモジュール(*.py)をsite-packagesフォルダに格納して利用することが可能です。
・格納先フォルダのパスは以下の通りです。
Analystの場合は以下のいずれかの場所に格納できます。
場所①(AppDataフォルダは隠しフォルダです):
C:\Users\[OSユーザー]\AppData\Roaming\Python\Python311\site-packages上記のパスは、Analyst に同梱されているPythonを使用して、コマンドプロンプト内で以下のコマンドを実行して確認できます。
python.exeのパスについて「補足②」を参照ください。
<パス>\python.exe -m site --user-site
場所②(AppData、Modulesフォルダは隠しフォルダです):
C:\Users\[OSユーザー]\AppData\Local\Spotfire\14.0.X\Modules\Python Interpreter_3.1109.XXXXX.XX\python\Lib\site-packagesまたは(上記フォルダが存在しない場合):
C:\Program Files (x86)\Spotfire\14.0.X\Modules\Python Interpreter_3.1109.XXXXX.XX\python\Lib\site-packages
Pythonサービスの場合:
C:\spotfire\nodemanager\14.0.X\nm\services\python-service-windows-1.17.X.XX-<GUID>\python\Lib\site-packages
・Pythonモジュール(本例:fibo.py)の例は以下の通りです。
def fib2(n):
"""Return Fibonacci series up to n."""
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a+b
return result
・Pythonデータ関数のスクリプト例は以下の通りです。上記のPython モジュール(拡張子なしでファイル名を指定)を import して利用できます。
from fibo import fib2
f1 = fib2(123)
方法①の場合は簡単に実施できますが、デメリットとして、以下のいずれかが実施された場合は再度ファイルを格納する必要があります。
- Pythonモジュール(*.py)が更新された
- Analyst 、Python サービスへのHotfix適用によりPythonモジュール(*.py)が削除された
- Analyst 、Python サービスの再インストールが実施された
方法②、Pythonパッケージ(*.whl)を作成
Pythonモジュール(*.py)からPythonパッケージ(*.whl)を作成して、Analyst やPython サービス同梱のPythonにインストールして利用します。
1.Pythonモジュール(*.py)からPythonパッケージ(*.whl)を作成します。
詳細手順について「補足①」を参照ください。
2.Pythonパッケージ(*.whl)をAnalyst やPythonサービスに同梱されているPythonにインストールします。
インストールは以下のコマンドで実施できます。
Analyst の場合(OSユーザーのホームフォルダにインストールします):
<パス>\python.exe -m pip install --user <whlファイルのフルパス>
Node Managerの場合:
<パス>\python.exe -m pip install <whlファイルのフルパス>python.exeのフルパスについて「補足②」を参照ください。
方法②の場合も、以下のいずれかが実施された場合は再度Pythonパッケージ(*.whl)をインストールする必要があります。
- Pythonモジュール(*.py)、またはPythonパッケージ(*.whl)が更新された
- Analyst 、Python サービスへのHotfix適用によりインストール済みPythonパッケージが削除された
- Analyst 、Python サービスの再インストールが実施された
方法③、Spotfireパッケージ(*.spk)を作成
Pythonパッケージ(*.whl)からさらにSpotfireパッケージ(*.spk)を作成してSpotfireにインストールして利用します。
1.Pythonパッケージ(*.whl)からSpotfireパッケージ(*.spk)を作成します。
Analyst 用SPKとPython サービス用SPKの2つを別々で作成する必要があります。
実施手順について「補足③」や「補足④」を参照ください。
2.Spotfire管理者権限のあるアカウントでブラウザからSpotfire Serverへログインし、上記で作成したSpotfireパッケージ(*.spk)を「Deployments&Packages」画面にてデプロイします。
3.Analyst ログイン時に更新のインストールが提示された際に、インストールを実施してください。
注意事項として、Analyst の場合はインストール時に証明書関連の警告が表示されますが、無視してインストールを進めてください。
Python サービスの場合は「Nodes&Services」画面にて「Update services」を実施してください。
方法③の場合、Spotfireパッケージ(*.spk)はSpotfire標準モジュールと一緒にAnalyst やPython サービスに配布されます。
Spotfireパッケージ(*.spk)が更新された場合、上記2.と3.の手順を繰り返してデプロイやインストールを再度実施してください。
補足
補足①、Pythonパッケージ(*.whl)の作成手順
Pythonモジュール(*.py)からPythonパッケージ(*.whl)を作成する手順は以下の通りです。
1.以下のフォルダを作成し、Pythonモジュール(*.py)を格納します。
本例では2つのPythonモジュール(mod1.py、mod2.py)を作成します。
パッケージ名は「mypackage2」とします。
<作業フォルダ>
├ setup.py
└ mypackage2
├ __init__.py
├ mod1.py
└ mod2.py
2.各ファイルの例は以下の通りです。
setup.py
from setuptools import setup
setup(
name='mypackage2',
version='0.1.0',
author='Your Name',
author_email='your.email@example.com',
description='A short description of my package',
packages=['mypackage2'],
install_requires=[],
)
__init__.py
from mypackage2.mod1 import fib2
from mypackage2.mod2 import double, square
__all__ = ["fib2", "double", "square"]
mod1.py
def fib2(n):
"""Return Fibonacci series up to n."""
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a+b
return result
mod2.py
def double(n):
return (n * 2)
def square(n):
return (n**2)
3.<作業フォルダ>の下で、以下のコマンドを実行してPythonパッケージ(*.whl)を作成します。
<パス>\python.exe setup.py bdist_wheelAnalyst やPython サービスに同梱されているPythonを使用します。python.exeのパスについて「補足②」を参照ください。
作成後のPythonパッケージ(*.whl)は「dist」フォルダの下に出力されます。
<作業フォルダ>\dist\mypackage2-0.1.0-py3-none-any.whl
補足②、バンドルPythonのフルパス
Analyst やPythonサービスに同梱されているPythonのフルパスは以下になります。
Analystの場合(AppData、Modulesフォルダは隠しフォルダです):
C:\Users\[OSユーザー]\AppData\Local\Spotfire\14.0.X\Modules\Python Interpreter_3.1109.XXXXX.XX\python\python.exeまたは(上記フォルダが存在しない場合):
C:\Program Files (x86)\Spotfire\14.0.X\Modules\Python Interpreter_3.1109.XXXXX.XX\python\python.exe
Analyst のメニュー:ツール⇒Python ツールを開いてpython.exeのフルパスを確認できます。
Pythonサービスの場合:
C:\spotfire\nodemanager\14.0.X\nm\services\python-service-windows-1.17.X.XX-<GUID>\python\python.exe
補足③、Analyst 用SPKの作成
Pythonパッケージ(*.whl)からAnalyst用SPKを作成する手順は以下の通りです。
1.以下の内容でテキストファイルを作成します。
ファイル名は任意ですが、本例は「requirements-Analyst.txt」とします。
複数個のPythonパッケージ(*.whl)をまとめてSPKを作成する場合、一行に1つのファイルパスを指定してください。
<フルパス>\mypackage2-0.1.0-py3-none-any.whl
2.以下のコマンドを実行してAnalyst 用SPKを作成します。
<パス>\python.exe -m spotfire.spk packages --analyst --versioned-filename --force -n "Python-Analyst-packages" "Python-Analyst-packages.spk" requirements-Analyst.txtAnalyst やPython サービスに同梱されているPythonを使用します。python.exeのパスについて「補足②」を参照ください。
引数:
- -m spotfire.spk packages --analyst:Analyst 用SPKの作成を示す
- --versioned-filename:SPKファイル名にバージョン番号を入れる
- --force:SPKファイルが既に存在する場合は上書きする
- -n "Python-Analyst-packages":SPKの表示名(デプロイ時の表示名)を指定(任意文字列)
- "Python-Analyst-packages.spk":SPKのファイル名を指定(任意文字列)
- requirements-Analyst.txt:上記の1.で作成したテキストファイルのパスを指定
コマンド実行後に作成されたSPKファイルの例は以下の通りです。
Python-Analyst-packages-1.0.0.0.spk
3.SPK作成後、「requirements-Analyst.txt」が更新されます。このファイルにはSPKのメタ情報が記載されているため、次回SPKを更新する際には該当「requirements-Analyst.txt」を使用してください。
補足④、Python サービス用SPKの作成
Pythonパッケージ(*.whl)からPythonサービス用SPKを作成する手順は以下の通りです。
1.以下の内容でテキストファイルを作成します。
ファイル名は任意ですが、本例は「requirements-Service.txt」とします。
複数個のPythonパッケージ(*.whl)をまとめてSPKを作成する場合、一行に1つのファイルパスを指定してください。
<フルパス>\mypackage2-0.1.0-py3-none-any.whl
2.以下のコマンドを実行してAnalyst 用SPKを作成します。
<パス>\python.exe -m spotfire.spk packages --versioned-filename --force -n "Python-Service-packages" "Python-Service-packages.spk" requirements-Service.txtAnalyst やPython サービスに同梱されているPythonを使用します。python.exeのパスについて「補足②」を参照ください。
引数:
- -m spotfire.spk packages:Pythonサービス用SPKの作成を示す
- --versioned-filename:SPKファイル名にバージョン番号を入れる
- --force:SPKファイルが既に存在する場合は上書きする
- -n "Python-Service-packages":SPKの表示名(デプロイ時の表示名)を指定(任意文字列)
- "Python-Service-packages.spk":SPKのファイル名を指定(任意文字列)
- requirements-Service.txt:上記の1.で作成したテキストファイルのパスを指定
コマンド実行後に作成されたSPKファイルの例は以下の通りです。
Python-Service-packages-1.0.0.0.spk
3.SPK作成後、「requirements-Service.txt」が更新されます。このファイルにはSPKのメタ情報が記載されているため、次回SPKを更新する際には該当「requirements-Service.txt」を使用してください。