Source code for wolframclient.evaluation.kernel.path
from __future__ import absolute_import, print_function, unicode_literals
from wolframclient.utils import six
from wolframclient.utils.api import os
[docs]def explore_paths(*paths):
highest_version = -1
best_path = None
for root in paths:
if os.isdir(root):
for version in os.listdir(root):
full_path = os.path_join(root, version)
if os.isdir(full_path):
try:
v_num = float(version)
except ValueError:
v_num = -2
if v_num > highest_version and v_num > 0:
highest_version = v_num
best_path = full_path
if best_path:
yield best_path
[docs]def installation_directories():
env = os.environ.get("WOLFRAM_INSTALLATION_DIRECTORY", None)
if env:
yield env
if six.WINDOWS:
for p in explore_paths(
"C:\\Program Files\\Wolfram Research\\Wolfram Desktop",
"C:\\Program Files\\Wolfram Research\\Mathematica",
"C:\\Program Files\\Wolfram Research\\Wolfram Engine",
):
yield p
elif six.LINUX:
for p in explore_paths(
"/usr/local/Wolfram/Desktop",
"/usr/local/Wolfram/Mathematica",
"/usr/local/Wolfram/WolframEngine",
):
yield p
elif six.MACOS:
yield "/Applications/Wolfram Desktop.app/Contents"
yield "/Applications/Mathematica.app/Contents"
yield "/Applications/Wolfram Engine.app/Contents"
[docs]def exe_path():
if six.WINDOWS:
return "WolframKernel.exe"
elif six.LINUX:
return "Executables/WolframKernel"
elif six.MACOS:
return "MacOS/WolframKernel"
[docs]def find_default_kernel_path():
""" Look for the most recent installed kernel. """
rel = exe_path()
for path in installation_directories():
if rel:
path = os.path_join(path, rel)
if os.isfile(path):
return path