diff --git a/.gitignore b/.gitignore index 0f7a8e5..b32103a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ .* *~ +__pycache__ +*.pyc +*.pyo diff --git a/blender_ipython.py b/blender_ipython.py new file mode 100755 index 0000000..29df802 --- /dev/null +++ b/blender_ipython.py @@ -0,0 +1,16 @@ +#!/usr/bin/python3 + +import sys + +if sys.argv[1:2] == ['kernel']: + from blender_ipython_kernel import launch_kernel + launch_kernel(sys.argv[1:]) +else: + from os.path import abspath, dirname, join as pathjoin + from pkg_resources import load_entry_point + + # use wrapper script for starting python processes + # the wrapper will defer execution to blender, if it was used to start a new kernel + sys.executable = pathjoin(dirname(abspath(__file__)), 'blender_ipython_wrapper.py') + + sys.exit(load_entry_point('ipython', 'console_scripts', 'ipython3')()) diff --git a/blender_ipython_kernel.py b/blender_ipython_kernel.py deleted file mode 100755 index 677c85d..0000000 --- a/blender_ipython_kernel.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/python3 - -import os -import sys -import distutils.spawn -import subprocess -import tempfile - -blender = distutils.spawn.find_executable("blender") -tempscript = tempfile.mktemp()+"_blender_ipython.py" - -with open(tempscript,"w") as f: - f.write("""\ -import sys -sys.argv[:] = [sys.executable] -from IPython.zmq.ipkernel import IPKernelApp - -app = IPKernelApp.instance() -app.initialize(%r) -app.start() -""" % sys.argv[1:]) - -try: - print("starting:", blender, '-b', '-P', tempscript) - sys.exit(subprocess.call([blender, '-b', '-P', tempscript])) -finally: - os.remove(tempscript) diff --git a/blender_ipython_notebook.py b/blender_ipython_notebook.py deleted file mode 100755 index 5c8b811..0000000 --- a/blender_ipython_notebook.py +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/python3 - -import sys -from os.path import abspath, dirname, join as pathjoin -from IPython.frontend.html.notebook.notebookapp import launch_new_instance - -sys.executable = pathjoin(dirname(abspath(__file__)), 'blender_ipython_kernel.py') - -launch_new_instance() diff --git a/blender_ipython_wrapper.py b/blender_ipython_wrapper.py new file mode 100755 index 0000000..6165a60 --- /dev/null +++ b/blender_ipython_wrapper.py @@ -0,0 +1,39 @@ +#!/usr/bin/python3 + +import os +import sys +import subprocess +import tempfile + +__all__ = 'launch_kernel', 'main' + +def launch_kernel(argv): + tempscript = tempfile.mktemp()+"_blender_ipython_kernel.py" + + # generate kernel starter script + with open(tempscript,"w") as f: + f.write("""\ +import sys +sys.argv[:] = [sys.executable] +from IPython.zmq.ipkernel import IPKernelApp + +app = IPKernelApp.instance() +app.initialize(%r) +app.start() +""" % argv) + + try: + print('starting: blender -b -P', tempscript) + sys.exit(subprocess.call(['blender', '-b', '-P', tempscript])) + finally: + os.remove(tempscript) + +def main(): + if sys.argv[1:3] != ['-c', 'from IPython.zmq.ipkernel import main; main()']: + # if it wasn't used to start a kernel really execute python + os.execlp('python3','python3',*sys.argv[1:]) + else: + launch_kernel(sys.argv[1:]) + +if __name__ == '__main__': + main()