Re: [O] [babel] Setting python interpreter version on per-block or per-subtree basis
Is there an easy way to specify the python version to use for a particular block or sub-tree? My use case is that I have mainly migrated to python 3, but there is still the occasional library that has not been updated yet, so I need to fall back to python 2.7 for some tasks. I can work around the problem by putting the python 2 code in a separate org file and use # Local Variables: # org-babel-python-command: /path/to/python2 # End: I think you can use shebang for this. It definitely works for tangling files: #+begin_src python :shebang #!/usr/bin/python2 :tangle ./raspberrypi/weather.py :exports none :noweb yes #+end_src
Re: [O] [babel] Setting python interpreter version on per-block or per-subtree basis
The attached patch should allow the specification of the python command through a new :python header argument. E.g., #+begin_src python :python /path/to/python2 return 1 + 2 #+end_src If someone who actually uses python could confirm that it works as expected then I'll be happy to apply it. From d57887adc70c524199b3307b74f17ea5751450f0 Mon Sep 17 00:00:00 2001 From: Eric Schulte schulte.e...@gmail.com Date: Fri, 25 Apr 2014 09:24:04 -0600 Subject: [PATCH] allow specification of python command w/header arg Using the :python header arg. * lisp/ob-python.el (org-babel-execute:python): Locally set `org-babel-python-command' using a header argument. --- lisp/ob-python.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lisp/ob-python.el b/lisp/ob-python.el index baa5764..eb25609 100644 --- a/lisp/ob-python.el +++ b/lisp/ob-python.el @@ -82,6 +82,8 @@ This function is called by `org-babel-execute-src-block'. (return-val (when (and (eq result-type 'value) (not session)) (cdr (assoc :return params (preamble (cdr (assoc :preamble params))) + (org-babel-python-command + (or (cdr (assoc :python params)) org-babel-python-command)) (full-body (org-babel-expand-body:generic (concat body (if return-val (format \nreturn %s return-val) )) -- 1.9.2 Best, Eric William Henney when...@gmail.com writes: Hi Is there an easy way to specify the python version to use for a particular block or sub-tree? My use case is that I have mainly migrated to python 3, but there is still the occasional library that has not been updated yet, so I need to fall back to python 2.7 for some tasks. I can work around the problem by putting the python 2 code in a separate org file and use # Local Variables: # org-babel-python-command: /path/to/python2 # End: but keeping everything in the same file would be preferable. Thanks Will -- Eric Schulte https://cs.unm.edu/~eschulte PGP: 0x614CA05D
Re: [O] [babel] Setting python interpreter version on per-block or per-subtree basis
Dear Sacha, Ian, and Eric Thanks very much for your replies. Sacha's way is a clever idea and works fine, but I think Eric's patch is the best solution in the long term. Please see attached test file - the patch works perfectly. Although I did have to study the manual carefully to work out how get it to work using the #+call: syntax. The key is to use inside header arguments. Ian's solution with shebang works when tangling but not for direct evaluation of the source block. Cheers Will On Fri, Apr 25, 2014 at 10:27 AM, Eric Schulte schulte.e...@gmail.comwrote: The attached patch should allow the specification of the python command through a new :python header argument. E.g., #+begin_src python :python /path/to/python2 return 1 + 2 #+end_src If someone who actually uses python could confirm that it works as expected then I'll be happy to apply it. Best, Eric William Henney when...@gmail.com writes: Hi Is there an easy way to specify the python version to use for a particular block or sub-tree? My use case is that I have mainly migrated to python 3, but there is still the occasional library that has not been updated yet, so I need to fall back to python 2.7 for some tasks. I can work around the problem by putting the python 2 code in a separate org file and use # Local Variables: # org-babel-python-command: /path/to/python2 # End: but keeping everything in the same file would be preferable. Thanks Will -- Eric Schulte https://cs.unm.edu/~eschulte PGP: 0x614CA05D -- Dr William Henney, Centro de Radioastronomía y Astrofísica, Universidad Nacional Autónoma de México, Campus Morelia multi-python.org Description: Binary data
Re: [O] [babel] Setting python interpreter version on per-block or per-subtree basis
I've just applied this patch. Thanks for the very attached nice test and demonstration file. Best, William Henney when...@gmail.com writes: Dear Sacha, Ian, and Eric Thanks very much for your replies. Sacha's way is a clever idea and works fine, but I think Eric's patch is the best solution in the long term. Please see attached test file - the patch works perfectly. Although I did have to study the manual carefully to work out how get it to work using the #+call: syntax. The key is to use inside header arguments. Ian's solution with shebang works when tangling but not for direct evaluation of the source block. Cheers Will On Fri, Apr 25, 2014 at 10:27 AM, Eric Schulte schulte.e...@gmail.comwrote: The attached patch should allow the specification of the python command through a new :python header argument. E.g., #+begin_src python :python /path/to/python2 return 1 + 2 #+end_src If someone who actually uses python could confirm that it works as expected then I'll be happy to apply it. Best, Eric William Henney when...@gmail.com writes: Hi Is there an easy way to specify the python version to use for a particular block or sub-tree? My use case is that I have mainly migrated to python 3, but there is still the occasional library that has not been updated yet, so I need to fall back to python 2.7 for some tasks. I can work around the problem by putting the python 2 code in a separate org file and use # Local Variables: # org-babel-python-command: /path/to/python2 # End: but keeping everything in the same file would be preferable. Thanks Will -- Eric Schulte https://cs.unm.edu/~eschulte PGP: 0x614CA05D -- Eric Schulte https://cs.unm.edu/~eschulte PGP: 0x614CA05D
[O] [babel] Setting python interpreter version on per-block or per-subtree basis
Hi Is there an easy way to specify the python version to use for a particular block or sub-tree? My use case is that I have mainly migrated to python 3, but there is still the occasional library that has not been updated yet, so I need to fall back to python 2.7 for some tasks. I can work around the problem by putting the python 2 code in a separate org file and use # Local Variables: # org-babel-python-command: /path/to/python2 # End: but keeping everything in the same file would be preferable. Thanks Will -- Dr William Henney, Centro de Radioastronomía y Astrofísica, Universidad Nacional Autónoma de México, Campus Morelia
Re: [O] [babel] Setting python interpreter version on per-block or per-subtree basis
William Henney when...@gmail.com writes: Hello, Will! Is there an easy way to specify the python version to use for a particular block or sub-tree? Is it something you can define an inherited property or a tag for, and then add some advice around org-babel-execute:python to check that property and use let to bind org-babel-python-comand? Maybe something like this, for example: #+begin_src emacs-lisp (defadvice org-babel-execute:python (around will activate) (if (member python2 (org-get-tags-at)) (let ((org-babel-python-command /path/to/python2)) ad-do-it) ad-do-it)) #+end_src * Test :python2: #+begin_src python return 1 + 3 #+end_src Sacha