-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdefault_env.py
56 lines (52 loc) · 1.54 KB
/
default_env.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import os
import sys
import ruamel_yaml
from glob import glob
from os.path import dirname, basename, join
PROJECT_DIR = sys.argv[1]
ENVS_DIRS = [
'/opt/continuum/.conda/envs',
'/opt/continuum/envs',
'/opt/continuum/anaconda/envs'
]
def _intif(x):
try:
return int(x)
except:
return 0
r_envs = []
r_versions = {}
all_envs = set()
for ebase in ENVS_DIRS:
g_envs = []
for emeta in glob(join(ebase, '*', 'conda-meta')):
epath = dirname(emeta)
ename = basename(epath)
if ename in all_envs:
ename = epath
all_envs.add(ename)
for pkg in glob(join(emeta, 'r-base-*.json')):
r_versions[ename] = basename(pkg).split('-', 3)[2]
ver = tuple(map(_intif, r_versions[ename].split('.')))
g_envs.append((ver, ename))
r_envs.extend(v for k, v in sorted(g_envs, reverse=True))
results = []
try:
with open(join(PROJECT_DIR, 'anaconda-project.yml'), 'r') as fp:
envs = ruamel_yaml.safe_load(fp).get('env_specs')
if not envs or 'default' in envs:
results.append('default')
results.extend(e for e in envs if e != 'default')
except Exception as exc:
results.append('@ERROR@')
desired_env = results[0]
results = [r for r in results if r in r_envs]
if results:
active_env = results[0]
elif os.environ.get('CONDA_DEFAULT_ENV') in r_envs:
active_env = os.environ['CONDA_DEFAULT_ENV']
elif r_envs:
active_env = next(iter(r_envs))
else:
active_env = desired_env
print(desired_env, active_env, r_versions[active_env])