Skip to content

Commit fa577a0

Browse files
committed
Improves RMG installation and database detection
Enhances the logic for locating the RMG database and the RMG-Py installation. This change expands the search paths for RMG, including standard locations used by conda and mamba, and environment variables, ensuring a more robust and reliable installation process. It also correctly identifies database locations within these environments.
1 parent e22263e commit fa577a0

1 file changed

Lines changed: 61 additions & 3 deletions

File tree

arc/settings/settings.py

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
Any definitions made to the local file will take precedence over this file.
66
"""
77

8+
import glob
89
import os
910
import string
1011
import sys
@@ -308,8 +309,25 @@ def find_executable(env_name, executable_name='python'):
308309
os.path.join(home, 'anaconda3', 'envs', env_name, 'bin', executable_name),
309310
os.path.join(home, 'miniconda3', 'envs', env_name, 'bin', executable_name),
310311
os.path.join(home, '.conda', 'envs', env_name, 'bin', executable_name),
312+
os.path.join(home, 'micromamba', 'envs', env_name, 'bin', executable_name),
313+
os.path.join(home, '.micromamba', 'envs', env_name, 'bin', executable_name),
314+
os.path.join(home, '.local', 'share', 'mamba', 'envs', env_name, 'bin', executable_name),
311315
os.path.join('/Local/ce_dana', 'anaconda3', 'envs', env_name, 'bin', executable_name),
312316
]
317+
mamba_root = os.getenv('MAMBA_ROOT_PREFIX')
318+
if mamba_root:
319+
candidate_paths.append(os.path.join(mamba_root, 'envs', env_name, 'bin', executable_name))
320+
conda_prefix = os.getenv('CONDA_PREFIX')
321+
if conda_prefix:
322+
candidate_paths.append(os.path.join(os.path.dirname(conda_prefix), 'envs', env_name, 'bin', executable_name))
323+
conda_exe = os.getenv('CONDA_EXE')
324+
if conda_exe:
325+
conda_base = os.path.dirname(os.path.dirname(conda_exe))
326+
candidate_paths.append(os.path.join(conda_base, 'envs', env_name, 'bin', executable_name))
327+
conda_envs_path = os.getenv('CONDA_ENVS_PATH')
328+
if conda_envs_path:
329+
for path in conda_envs_path.split(os.pathsep):
330+
candidate_paths.append(os.path.join(path, env_name, 'bin', executable_name))
313331
for path in candidate_paths:
314332
if os.path.isfile(path):
315333
return path
@@ -320,14 +338,40 @@ def find_executable(env_name, executable_name='python'):
320338
TS_GCN_PYTHON = find_executable('ts_gcn')
321339
AUTOTST_PYTHON = find_executable('tst_env')
322340
ARC_PYTHON = find_executable('arc_env')
341+
RMG_ENV_NAME = 'rmg_env'
323342
RMG_PYTHON = find_executable('rmg_env')
324343
XTB = find_executable('xtb_env', 'xtb')
325344

326345
# Set RMG_DB_PATH with fallback methods
327346
rmg_db_candidates, rmg_candidates = list(), list()
328347

348+
349+
def add_rmg_db_candidates(prefix: str) -> None:
350+
"""Add RMG-database candidates relative to a conda/mamba env prefix."""
351+
if not prefix:
352+
return
353+
rmg_db_candidates.extend([
354+
os.path.join(prefix, 'share', 'RMG-database'),
355+
os.path.join(prefix, 'share', 'rmg-database'),
356+
os.path.join(prefix, 'share', 'rmg', 'database'),
357+
os.path.join(prefix, 'share', 'rmg_database'),
358+
os.path.join(prefix, 'share', 'RMG_database'),
359+
os.path.join(prefix, 'share', 'rmgdatabase'),
360+
os.path.join(prefix, 'share', 'RMGdatabase'),
361+
])
362+
rmg_db_candidates.extend(glob.glob(os.path.join(prefix, 'lib', 'python*', 'site-packages', 'RMG-database')))
363+
rmg_db_candidates.extend(glob.glob(os.path.join(prefix, 'lib', 'python*', 'site-packages', 'rmg-database')))
364+
rmg_db_candidates.extend(glob.glob(os.path.join(prefix, 'lib', 'python*', 'site-packages', 'rmg_database')))
365+
rmg_db_candidates.extend(glob.glob(os.path.join(prefix, 'lib', 'python*', 'site-packages', 'RMG_database')))
366+
rmg_db_candidates.extend(glob.glob(os.path.join(prefix, 'lib', 'python*', 'site-packages', 'rmgdatabase')))
367+
rmg_db_candidates.extend(glob.glob(os.path.join(prefix, 'lib', 'python*', 'site-packages', 'RMGdatabase')))
368+
for candidate in glob.glob(os.path.join(prefix, 'share', '**', 'recommended.py'), recursive=True):
369+
if candidate.endswith(os.path.join('input', 'kinetics', 'families', 'recommended.py')):
370+
rmg_db_candidates.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(candidate)))))
371+
329372
# Use exported RMG_PATH & RMG_DB_PATH if available
330-
exported_rmg_path, exported_rmg_db_path = os.getenv("RMG_PATH"), os.getenv("RMG_DB_PATH")
373+
exported_rmg_path = os.getenv("RMG_PATH")
374+
exported_rmg_db_path = os.getenv("RMG_DB_PATH") or os.getenv("RMG_DATABASE")
331375
if exported_rmg_path:
332376
rmg_candidates.append(exported_rmg_path)
333377
if exported_rmg_db_path:
@@ -339,7 +383,7 @@ def find_executable(env_name, executable_name='python'):
339383
rmg_db_candidates.append(os.path.join(gw, 'RMG-database'))
340384

341385
for python_path in sys.path:
342-
if 'RMG-database' in python_path:
386+
if 'RMG-database' in python_path or 'rmgdatabase' in python_path or 'rmg_database' in python_path:
343387
rmg_db_candidates.append(python_path)
344388
if 'RMG-Py' in python_path:
345389
rmg_db_candidates.append(os.path.join(os.path.dirname(python_path), 'RMG-database'))
@@ -348,9 +392,23 @@ def find_executable(env_name, executable_name='python'):
348392
if 'RMG-Py' in p:
349393
rmg_candidates.append(p)
350394
rmg_db_candidates.append(os.path.join(os.path.dirname(p), 'RMG-database'))
351-
if 'RMG-database' in p:
395+
if 'RMG-database' in p or 'rmgdatabase' in p or 'rmg_database' in p:
352396
rmg_db_candidates.append(p)
353397

398+
add_rmg_db_candidates(os.path.dirname(os.path.dirname(sys.executable)))
399+
if RMG_PYTHON:
400+
add_rmg_db_candidates(os.path.dirname(os.path.dirname(RMG_PYTHON)))
401+
if os.getenv('MAMBA_ROOT_PREFIX'):
402+
add_rmg_db_candidates(os.path.join(os.getenv('MAMBA_ROOT_PREFIX'), 'envs', 'rmg_env'))
403+
if os.getenv('CONDA_PREFIX'):
404+
add_rmg_db_candidates(os.path.join(os.path.dirname(os.getenv('CONDA_PREFIX')), 'envs', 'rmg_env'))
405+
if os.getenv('CONDA_EXE'):
406+
conda_base = os.path.dirname(os.path.dirname(os.getenv('CONDA_EXE')))
407+
add_rmg_db_candidates(os.path.join(conda_base, 'envs', 'rmg_env'))
408+
if os.getenv('CONDA_ENVS_PATH'):
409+
for path in os.getenv('CONDA_ENVS_PATH').split(os.pathsep):
410+
add_rmg_db_candidates(os.path.join(path, 'rmg_env'))
411+
354412
rmg_candidates.extend([
355413
os.path.join(home, 'Code', 'RMG-Py'),
356414
os.path.join(home, 'runner', 'work', 'ARC', 'ARC', 'RMG-Py')

0 commit comments

Comments
 (0)