ネイティブpythonの拡張ノードでつかうpyhtonパッケージを導入する

# パッケージ導入
ネイティブpythonの拡張ノードでつかうpythonパッケージを導入します。
Modeler 18.5のmodelerpyのパッケージには[installPackage](https://www.ibm.com/docs/ja/spss-modeler/18.5.0?topic=spark-native-python-apis#extension_nativepython_api__title__5)というメソッドあります。
```python
modelerpy.installPackage('scikit-learn')
```
しかしながら、デフォルト状態だとこのメソッドは失敗します。

ModelerをWindowsに導入するとデフォルトでは"C:\Program Files\IBM\SPSS\Modeler\18.5"に導入されます。ネイティブpythonのpythonもやはりその配下に導入されます。一方で[Windowsは、"C:¥Program Files"は一般ユーザーからの書き込みを制限しています](https://learn.microsoft.com/ja-jp/windows/security/application-security/application-control/user-account-control/how-it-works#virtualization)。そのため、パッケージ導入のAPIのmodelerpy.installPackageを実行すると以下のような権限不足で失敗するのです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/29f4ceba-5bde-fa1a-d5db-dda74d81729a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/5e8141dc-8351-40dc-1f57-780f6fb11d94.png)

```
ERROR: Could not install packages due to an OSError: [Errno 13] Permission denied: 'C:\\Program Files\\IBM\\SPSS\\Modeler\\18.5\\python_venv\\Lib\\site-packages\\threadpoolctl.py'
Check the permissions.
```

これを避けるためには以下の方法が考えられます。

1.Administoratorの権限でpipで導入する
2.パッケージ導入フォルダの権限を変更する。

* テスト環境
    * Modeler 18.5
    * Windows 11 64bit

# 1.Administoratorの権限でpipで導入する
コマンドプロンプトを「管理者として実行」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/6190f3ac-7dba-4910-af40-cd65369ff6dc.png)

以下のpipコマンドで導入します。
```
"C:\Program Files\IBM\SPSS\Modeler\18.5\python_venv\Scripts\python.exe" -m pip install scikit-learn
```
以下のように導入できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/1da5dd12-8434-ab5b-1161-f975e5b245e0.png)


# 2.パッケージ導入フォルダの権限を変更する。
標準導入パスの場合、パッケージは「C:\Program Files\IBM\SPSS\Modeler\18.5\python_venv\」に導入されますので、ここにユーザーレベルでの「変更」と「書き込み」の権限を付けます。
フォルダを選び、右クリックで「プロパティ」を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e8bf1e7e-6f9c-ef10-3390-71a96579edde.png)

「セキュリティ」タブでアクセス許可を「編集」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/ce03c862-3e9b-44c7-1c07-8695148b4794.png)

「Users」グループを選び、「変更」と「書き込み」にチェックを付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/6d27f5ae-0cd3-78f5-9282-be59b695e313.png)

「Users」グループに、「変更」と「書き込み」にチェックがつきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/60e754d1-00ea-de68-2f97-b225a191ff7b.png)


これでmodelerpy.installPackageが実行できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e3ffea13-359f-a419-ae78-c98bfb50d445.png)

```python
# ネイティブ Python APIのパッケージ
import modelerpy

#scikit-learnパッケージをPypiから導入
modelerpy.installPackage('scikit-learn')
```
以下のように導入できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/b4f944da-94f9-546b-91d6-d0fc9e12cc00.png)


# おまけ
Python for sparkではユーザーが後から自分で導入したPython環境を利用することができましたが、ネイティブPythonではModeler導入ディレクトリの配下のPythonを使います。そのためにWindowsではこのような制限が発生しています。また、パッケージ導入はコンフリクトを起こしかねないのでクリーンな環境を使いたいこともあります。
そのため、別に導入した環境を使えるようにするという製品改善要望を上げています。ご賛同をいただける方はVoteしていただけると実現されるかもしれません。

https://ibm-data-and-ai.ideas.ibm.com/ideas/MDLR-I-421

# 参考

#### SPSS Modeler18.5の新機能の ネイティブ Python API #SPSS - Qiita 
https://qiita.com/kawada2017/items/0ae6f0974788b372dc4f