JMPが正しいバージョンのPythonを見つけられないことがあります。そのような場合は、コマンドラインからPythonを実行してみてください。ターミナルウィンドウまたはコンソールウィンドウからPythonが実行できない場合は、インストール中に問題が発生した可能性があります。
メモ: トラブルシューティングを始める前に、使用しているPythonのバージョンが適切かどうかを確認してください。Pythonのインストールを参照してください。
JSLスクリプトでPythonへの接続の指定が実行されるまで、JMPはPythonを起動しません。Pythonをロードする際、JMPは、Python共有ライブラリやPython DLLが依存している共有ライブラリを見つける必要があります。Pythonインタプリタがロードされたら、Pythonは、そのバージョンの標準モジュールを見つける必要があります。JMPは、このプロセスのため、レジストリのエントリや環境変数、ユーザ定義のパスを使用します。
Pythonも特定の環境変数を探します。JMPがレジストリでPythonを見つけられるよう、ユーザ定義のパスや環境変数の使用を避けてください。自動的に場所が特定できなかった場合は、以下のような方法でJMPにPythonを見つけさせることができます。
• JMP_PYTHON_MODULE_PATHは、PYTHONPATHに対応した、MPだけで使えるパスであり、Python Sys Pathの代わりになるものです。JMP_PYTHON_MODULE_PATHには、OSの標準的な形式でパスを指定してください。macOSではパスをコロンで区切ってください。Windowsではパスをセミコロンで区切ってください。
• 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を呼び出すPython Init()関数またはPython Connect()関数で指定されたオプションを確認します。Path()オプションには、Python共有ライブラリの場所を指定します。Use Python Version()オプションでは、使用するPythonのバージョンを指定して探すことができます。
Python Sys Pathは、Pythonのsys.path変数を設定する仕組みを提供します。スクリプトにパラメータを指定した場合は、それらが環境変数より優先されます。しかしながら、注意すべき点があります。JMPがPython共有ライブラリをロードすると、そのライブラリは、JMPの終了時までアンロードされません。そのため、Path()の部分はPythonの初回ロード時のみ有効で、JMPをいったん終了して再起動しない限り、別のスクリプトで異なるバージョンのPythonを使用することはできません。
4. JMPは、Windowsレジストリをチェックし、Pythonがインストールされていることを確認します。インストールが個々のユーザ用か、Windowsマシン上のすべてのユーザ用かに応じて、異なる場所を探します。Pythonのバージョンを指定した場合、異なるバージョンのPythonは検出の対象になりません。
JMPがPythonを見つけられない場合、Python Init()式で次のオプションを使用してみてください。
Python Init( Init Trace( "TRUE" ) );
JMPは、Pythonを検出した場所について、パスやレジストリを含む詳細をログに出力します。
通常、JMPは以下のWindowsレジストリで定義されている、PYTHONHOMEのPythonを自動的に認識します。
Computer¥<root>¥SOFTWARE¥Python¥PythonCore¥<version>¥InstallPath
<root>は、どのようにPythonをインストールしたかによって、ルートキーHKEY_LOCAL_MACHINEあるいはHKEY_CURRENT_USERのいずれかになります。<version>はPythonのバージョン番号です。
コンピュータに複数のバージョンのPythonがインストールされている場合は、以下のいずれかの方法で、どのバージョンを使用するかを指定しなければなりません。
• 最も簡単な方法: Python Init()関数またはPython Connect()関数でUse Python Version()引数を使用し、バージョンを指定する。
• Python Init()関数またはPython Connect()関数でPath("インストールされたPythonのdllや共有ライラリがある場所")引数を指定する。
• 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が別の場所にインストールされている場合は、シェル環境の構成変数を必要に応じて設定してください。macOS上のJMPは、JMPによるPythonの検出方法(Windows)で説明されている環境変数を使用します。
JMP_LIB_PYTHON_PATHは、Python共有ライブラリlibpython3.x.dylibへのパス(xはマイナーバージョン)を示します。環境変数が必要な場合、通常はJMP_LIB_PYTHON_PATHのみを設定すれば足ります。
JMPがPythonのインストールパッケージを見つけられない場合は、変数JMP_PYTHON_MODULE_PATHも設定する必要があります。JMP_PYTHON_MODULE_PATHには、Pythonでのprint(sys.path)の実行結果と同じパスが含まれます。環境変数を設定するときは、ホストOSのパス規則に従ってください。JSLで変数を渡す場合は、JSLリストを使用してください。
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