75 lines
2.1 KiB
Python
Executable File
75 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# installs a jupyter kernel wrapper solution into the environment's
|
|
# $ENVPATH/share/jupyter/kernels/python3/kernel.json kernel definition
|
|
|
|
# typical envpath at PSI
|
|
# "/opt/psi/Programming/anaconda/2019.07/conda/envs/datascience_py37"
|
|
|
|
import re
|
|
import os
|
|
import sys
|
|
import shutil
|
|
from datetime import datetime
|
|
import argparse
|
|
parser = argparse.ArgumentParser()
|
|
|
|
# DEFAULTS
|
|
verbose_flag = False
|
|
|
|
parser.add_argument("envpath", help="conda env path")
|
|
parser.add_argument("-v", "--verbose", help="verbose mode",action="store_true")
|
|
args = parser.parse_args()
|
|
|
|
if args.verbose:
|
|
verbose_flag = True
|
|
|
|
envpath = args.envpath
|
|
envname = os.path.basename(envpath)
|
|
condaroot = re.sub(r'(.*)/conda/envs/.*', r'\1', envpath)
|
|
kwrapper = os.path.join(condaroot, 'admintools/kernelwrapper.sh')
|
|
kfile = os.path.join(envpath,"share/jupyter/kernels/python3/kernel.json")
|
|
|
|
date_time = datetime.now().strftime("%Y%m%d-%H%M%S")
|
|
|
|
if verbose_flag:
|
|
print("env: %s" % envname)
|
|
print(kwrapper)
|
|
|
|
if not os.path.isfile(kwrapper):
|
|
sys.stderr.write("Error: no wrapper found at %s\n" % (kwrapper))
|
|
sys.exit(1)
|
|
|
|
searchstr = r'"argv": \[\n( *"/.*python", *)'
|
|
subststr = r'"argv": [\n' + ' "' + kwrapper + '",\n' + ' "' + envname + r'",\n\1'
|
|
|
|
try:
|
|
with open(kfile,"r") as fp:
|
|
filestr = "".join(fp.readlines())
|
|
except IOError:
|
|
sys.stderr.write("Error: Env has no kernel file: %s\n" % kfile)
|
|
sys.exit(0)
|
|
|
|
if re.search(kwrapper, filestr):
|
|
if verbose_flag:
|
|
print("env %s already contains kernelwrapper" % envpath)
|
|
sys.exit(0)
|
|
|
|
if re.search(searchstr, filestr):
|
|
filestr = re.sub(searchstr,
|
|
subststr,
|
|
filestr)
|
|
print(filestr)
|
|
|
|
bupfile = kfile + "-" + date_time + ".bup"
|
|
if verbose_flag:
|
|
print("copying original file to %s" % bupfile)
|
|
shutil.copyfile(kfile, bupfile)
|
|
if verbose_flag:
|
|
print("writing new file %s" % kfile)
|
|
print(filestr)
|
|
with open(kfile,"w") as fp:
|
|
fp.write(filestr)
|
|
else:
|
|
sys.stderr.write("ERROR: Could not do substitution in %s" % kfile)
|
|
sys.stderr.write(filestr)
|