場合によっては、JMPが正しいバージョンのPythonを見つけられないことがあります。そのような場合は、コマンドラインからPythonを実行してみてください。ターミナルウィンドウまたはコンソールウィンドウからPythonが実行できない場合は、インストール中にエラーが生じたと考えられます。
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からは削除されます。そのため、この変数を設定しないでください。現在は、PYTHONINSTALLPATHがJMP_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環境変数を定義する。
コントロールパネルを使用して、システム環境変数を作成します。
1. [スタート]>[コントロールパネル]>[システム]>[システムの詳細設定]の順に選択する。
2. [環境変数]をクリックする。
3. システム環境変数の枠内にある[新規]をクリックする。
4. [変数名]にJMP_LIB_PYTHON_PATHと入力する。
5. [変数値]にPython<version>.dllファイルのパスを入力する。例:
C:/Program Files/Python/<version>/Python<version>.dll
6. [OK]をクリックした後、再度[OK]をクリックし、システム環境変数のウィンドウを閉じる。
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