From c08039f6adc803639859bd850192161b010d0283 Mon Sep 17 00:00:00 2001 From: Brendan Rius Date: Thu, 10 Aug 2017 17:00:32 +0200 Subject: [PATCH] Change install procedure --- Dockerfile | 10 ++-- README.md | 4 +- c_spec/kernel.json | 11 ----- jupyter_c_kernel/install_c_kernel | 81 +++++++++++++++++++++++++++++++ setup.py | 3 +- 5 files changed, 89 insertions(+), 20 deletions(-) delete mode 100644 c_spec/kernel.json create mode 100644 jupyter_c_kernel/install_c_kernel diff --git a/Dockerfile b/Dockerfile index adc1c1f..2729aa5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,13 +3,13 @@ MAINTAINER Brendan Rius USER root -RUN mkdir /jupyter - -WORKDIR /jupyter +WORKDIR /tmp COPY ./ jupyter_c_kernel/ -RUN pip install -e jupyter_c_kernel/ -RUN jupyter-kernelspec install jupyter_c_kernel/c_spec/ +RUN pip install --no-cache-dir -e jupyter_c_kernel/ +RUN cd jupyter_c_kernel && python -m jupyter_c_kernel.install_c_kernel --user WORKDIR /home/$NB_USER/ + +USER $NB_USER diff --git a/README.md b/README.md index 1d3bd93..01419bc 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,7 @@ ### Step-by-step: * `pip install jupyter-c-kernel` - * `git clone https://github.com/brendan-rius/jupyter-c-kernel.git` - * `cd jupyter-c-kernel` - * `jupyter-kernelspec install c_spec/` + * `install_c_kernel` * `jupyter-notebook`. Enjoy! ### Easy installation for Unix user: diff --git a/c_spec/kernel.json b/c_spec/kernel.json deleted file mode 100644 index 3ec626f..0000000 --- a/c_spec/kernel.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "argv": [ - "python3", - "-m", - "jupyter_c_kernel", - "-f", - "{connection_file}" - ], - "display_name": "C", - "language": "c" -} \ No newline at end of file diff --git a/jupyter_c_kernel/install_c_kernel b/jupyter_c_kernel/install_c_kernel new file mode 100644 index 0000000..e05366f --- /dev/null +++ b/jupyter_c_kernel/install_c_kernel @@ -0,0 +1,81 @@ +#!/usr/bin/env python + +import json +import os +import sys +import argparse + +from jupyter_client.kernelspec import KernelSpecManager +from IPython.utils.tempdir import TemporaryDirectory + +kernel_json = { + "argv": [ + "python3", + "-m", + "jupyter_c_kernel", + "-f", + "{connection_file}" + ], + "display_name": "C", + "language": "c" +} + + +def install_my_kernel_spec(user=True, prefix=None): + with TemporaryDirectory() as td: + os.chmod(td, 0o755) # Starts off as 700, not user readable + with open(os.path.join(td, 'kernel.json'), 'w') as f: + json.dump(kernel_json, f, sort_keys=True) + # TODO: Copy resources once they're specified + + print('Installing IPython kernel spec') + KernelSpecManager().install_kernel_spec(td, 'bash', user=user, replace=True, prefix=prefix) + + +def _is_root(): + try: + return os.geteuid() == 0 + except AttributeError: + return False # assume not an admin on non-Unix platforms + + +def main(argv=[]): + parser = argparse.ArgumentParser( + description='Install KernelSpec for C Kernel' + ) + prefix_locations = parser.add_mutually_exclusive_group() + + prefix_locations.add_argument( + '--user', + help='Install KernelSpec in user homedirectory', + action='store_false' if _is_root() else 'store_true' + ) + prefix_locations.add_argument( + '--sys-prefix', + help='Install KernelSpec in sys.prefix. Useful in conda / virtualenv', + action='store_true', + dest='sys_prefix' + ) + prefix_locations.add_argument( + '--prefix', + help='Install KernelSpec in this prefix', + default=None + ) + + args = parser.parse_args() + + if args.sys_prefix: + prefix = sys.prefix + user = None + elif args.user: + prefix = None + user = True + else: + prefix = args.prefix + user = None + + install_my_kernel_spec(user=user, prefix=prefix) + + +if __name__ == '__main__': + main(argv=sys.argv) diff --git a/setup.py b/setup.py index 11c3b87..2937f9b 100644 --- a/setup.py +++ b/setup.py @@ -8,5 +8,6 @@ setup(name='jupyter_c_kernel', url='https://github.com/brendanrius/jupyter-c-kernel/', download_url='https://github.com/brendanrius/jupyter-c-kernel/tarball/1.1.0', packages=['jupyter_c_kernel'], - keywords=['jupyter', 'kernel', 'c'] + scripts=['jupyter_c_kernel/install_c_kernel'], + keywords=['jupyter', 'notebook', 'kernel', 'c'] )