Re: [O] [babel] Setting python interpreter version on per-block or per-subtree basis

2014-04-25 Thread Ian Barton



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

2014-04-25 Thread Eric Schulte
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

2014-04-25 Thread William Henney
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

2014-04-25 Thread Eric Schulte
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

2014-04-24 Thread William Henney
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

2014-04-24 Thread Sacha Chua
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