スクリプトガイド > JMPの拡張 > Pythonの操作 > JMPでのPython接続に関するトラブルシューティング
公開日: 04/01/2021

JMPでのPython接続に関するトラブルシューティング

場合によっては、JMPが正しいバージョンのPythonを見つけられないことがあります。そのような場合は、コマンドラインからPythonを実行してみてください。ターミナルウィンドウまたはコンソールウィンドウからPythonが実行できない場合は、インストール中にエラーが生じたと考えられます。

JMPによるPythonの検出方法(Windows)

JSLスクリプトでPythonへの接続の指定が実行されるまで、JMPはPythonを起動しません。Pythonをロードする際、JMPは、Python共有ライブラリやPython DLLが依存している共有ライブラリを見つける必要があります。Pythonインタプリタがロードされたら、Pythonは、そのバージョンの標準モジュールを見つける必要があります。このプロセスを支援するため、JMPは、レジストリのエントリや環境変数、ユーザ定義のパスを使用します。

Pythonも特定の環境変数を探します。そのため、JMPがレジストリでPythonを見つけられるよう、ユーザ定義のパスや環境変数の使用を避けてください。自動的に場所が特定されなかった場合は、以下のような方法が有効です。

Python Sys Path環境変数は、PythonのPYTHONPATHのJMP専用バージョンでしたが、JMP 15で廃止され、JMP 16からは削除されます。PYTHONPATHのパスは、JSLパスのリストの形式を取ります。

JMP_PYTHON_MODULE_PATHは、PYTHONPATHのJMP専用バージョンとしてPython Sys Pathの代わりに採用されました。JMP_PYTHON_MODULE_PATHでは、標準のOSパスを指定します。macOSではパスをコロンで区切ります。Windowsではパスをセミコロンで区切ります。

PYTHONINSTALLPATHはJMP 15で廃止され、JMP 16からは削除されます。そのため、この変数を設定しないでください。現在は、PYTHONINSTALLPATHJMP_PYTHON_MODULE_PATHに優先します。

JMP_LIB_PYTHON_PATHは、PYTHONHOMEのJMP専用バージョンです。この変数には、Python共有ライブラリ、または共有ライブラリの親ディレクトリの完全パスが含まれます。

Windowsは、次の優先順位に従ってPythonを探します。

1. JMPが、環境変数のPython Sys Path(廃止)、PYTHONINSTALLPATH(廃止)、JMP_PYTHON_MODULE_PATHをこの順序で確認し、最初に見つけた変数を使用します。

2. JMPがJMP_LIB_PYTHON_PATHでPython共有ライブラリのパスを確認します。

3. JMPがPython Init()またはPython Connect()関数呼び出しで指定されたオプションを確認します。Path()は、Python共有ライブラリの場所に対応します。Use Python Version()では、Pythonのバージョンを指定して探すことができます。

Python Sys Pathは、Pythonのsys.path変数を設定する仕組みを提供します。スクリプトパラメータがある場合は、スクリプトパラメータが環境変数に優先します。注意すべき点が1つあります。JMPがPython共有ライブラリをロードした後、ライブラリは、JMPのシャットダウン時に初めてアンロードされます。そのため、Path()の部分はPythonの初回ロード時のみ有効で、JMPをシャットダウンして再起動しない限り、異なるスクリプトで異なるバージョンのPythonを実行することはできません。

4. JMPはWindowsレジストリをチェックし、Pythonがインストールされていることを確認します。インストールが個々のユーザ用か、Windowsマシン上のすべてのユーザ用かに応じて、異なる場所を探します。Pythonのバージョンを指定した場合、その他のバージョンは考慮されません。

JMPがPythonを見つけられない場合、Python Init()式で次のオプションを使用してみてください。

Python Init( Init Trace( "TRUE" ) );

JMPは、Pythonを検出した場所について、パスやレジストリを含む詳細をログに出力します。

通常、JMPは以下のWindowsレジストリで定義されている、PYTHONHOMEと等価なものを自動的に認識します。

Computer\<root>\SOFTWARE\Python\PythonCore\<version>\InstallPath

<root>は、どのようにPythonをインストールしたかによって、ルートキーHKEY_LOCAL_MACHINEあるいはHKEY_CURRENT_USERのいずれかになります。<version>はPythonのバージョン番号です。

コンピュータに複数のバージョンがインストールされている場合は、JMPでどのバージョンを使用するかを指定しなければなりません。

最も簡単なのは、Python Init()関数またはPython Connect()関数でUse Python Version()引数を使用し、バージョンを指定する方法。

Python Init()関数またはPython Connect()関数でPath("インストールされたPythonのdllや共有ライラリがある場所")引数を使用する。

次の2つの方法のいずれかを使用して、JMP_LIB_PYTHON_PATH環境変数を定義する。

Windows上にインストールしたPythonのデフォルトの場所を変更する

コントロールパネルを使用して、システム環境変数を作成します。

1. [スタート]>[コントロールパネル]>[システム]>[システムの詳細設定]の順に選択する。

2. [環境変数]をクリックする。

3. システム環境変数の枠内にある[新規]をクリックする。

4. [変数名]にJMP_LIB_PYTHON_PATHと入力する。

5. [変数値]にPython<version>.dllファイルのパスを入力する。例:

C:/Program Files/Python/<version>/Python<version>.dll

6. [OK]をクリックした後、再度[OK]をクリックし、システム環境変数のウィンドウを閉じる。

macOS: JMPによるPythonの検出方法を変更する

macOSでPythonを検出する際は、レジストリを確認する手順がWindowsとは異なります。JMPは、標準的なインストールディレクトリをいくつか確認し、Pythonを探します。Pythonは、通常は
/Library/Frameworks/Python.frameworkにインストールされます。互換性のあるバージョンのPythonが、システム上の標準的な場所にインストールされているなら、JSLに渡される環境変数やパラメータに変更を加えなくても正常に動作します。

Pythonがその他の場所にインストールされている場合は、構成変数を設定する必要があります。JMPで、上記のWindowsの節にある手順で変数を設定します。JMP_PYTHON_MODULE_PATHは、sys.pathを呼び出したときの出力の変数です。環境変数を設定するときは、ホストOSのパス規則に従ってください。JSLで変数を渡す場合は、JSLリストを使用します。

1つの方法として、sys.pathが何であるかをPythonに推測してもらう方法が挙げられます。この節の例では、同じPythonコマンドをWindowsで実行してsys.pathを特定することができます。

ターミナルウィンドウまたはコンソールウィンドウで、以下の太字のコマンドを入力し、Pythonパッケージの場所を示す文字列を取得します。

MDz320:~ shlori$ python --version
Python 3.6.4 ::Anaconda, Inc.
MDz320~ shlori$ python3
Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 12:04:33) [GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)

[’’, ’/anaconda3/lib/python36.zip’, ’/anaconda3/lib/python3.6’, ’/anaconda3/lib/python3.6/lib-dynload’, ’/anaconda3/lib/python3.6/site-packages’, ’/anaconda3/lib/python3.6/site-packages/aeosa’]

セットアップのテスト

お使いのコンピュータで、Pythonを使ったJSLスクリプトが実行できるかどうかをテストするには、次のJSLスクリプトを実行してください。

Python Init();
Python Submit( "\[basket = ['apple', 'orange', 'pear']
print(basket)]\" );
Python Term();

ログには次のような内容が出力されます。

['apple', 'orange', 'pear']

0

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).