ob-python: Changed options for default Python command
ob-python will now use the same settings as `run-python' when starting interactive sessions, by default. * lisp/ob-python.el (org-babel-python-command): Changed to have additional `auto' option, which is the new default value. (org-babel-python-command-session): New option to control default session Python command. (org-babel-python-command-nonsession): New option to control default nonsession Python command. (org-babel-python--command): New function to determine the command to run Python. (org-babel-python-initiate-session-by-key): Call `run-python' without CMD arg. Instead, set `python-shell-interpreter' and `python-shell-interpreter-args' from `org-babel-python--command' when needed. (org-babel-python-evaluate-external-process): Use `org-babel-python--command' to start Python.
This commit is contained in:
parent
d526ab5388
commit
9239b0e8d1
30
etc/ORG-NEWS
30
etc/ORG-NEWS
|
@ -551,6 +551,36 @@ Currently implemented options are:
|
||||||
The capture template expansion element =%K= creates links using
|
The capture template expansion element =%K= creates links using
|
||||||
~org-store-link~, which respects the values of ~org-id-link-to-use-id~.
|
~org-store-link~, which respects the values of ~org-id-link-to-use-id~.
|
||||||
|
|
||||||
|
*** Changes to ~org-babel-python-command~, and new session/nonsession specific options
|
||||||
|
|
||||||
|
The default Python command used by interactive sessions has been
|
||||||
|
changed to match ~python-shell-interpreter~ and
|
||||||
|
~python-shell-interpreter-args~ by default. The default Python
|
||||||
|
command for nonsessions has not changed.
|
||||||
|
|
||||||
|
New options ~org-babel-python-command-nonsession~ and
|
||||||
|
~org-babel-python-command-session~ control the default Python command
|
||||||
|
for nonsessions and sessions, respectively. By default,
|
||||||
|
~org-babel-python-command-session~ is ~auto~, which means to use the
|
||||||
|
configuration for ~python-shell-interpreter(-args)~ as default.
|
||||||
|
|
||||||
|
The old option ~org-babel-python-command~ has been changed to have
|
||||||
|
default value of ~auto~. When not ~auto~, it overrides both
|
||||||
|
~org-babel-python-command-nonsession~ and
|
||||||
|
~org-babel-python-command-session~. Therefore, users who had
|
||||||
|
previously set ~org-babel-python-command~ will not experience any
|
||||||
|
changes.
|
||||||
|
|
||||||
|
Likewise, users who had neither set ~org-babel-python-command~ nor
|
||||||
|
~python-shell-interpreter(-args)~ will not see any changes -- ~python~
|
||||||
|
remains the default command.
|
||||||
|
|
||||||
|
The main change will be for users who did not configure
|
||||||
|
~org-babel-python-command~, but did configure
|
||||||
|
~python-shell-interpreter~, e.g. to use IPython. In this case,
|
||||||
|
~ob-python~ will now start interactive sessions in a more consistent
|
||||||
|
manner with ~run-python~.
|
||||||
|
|
||||||
** New features
|
** New features
|
||||||
*** =ob-plantuml.el=: Support tikz file format output
|
*** =ob-plantuml.el=: Support tikz file format output
|
||||||
|
|
||||||
|
|
|
@ -46,10 +46,28 @@
|
||||||
(python . :any))
|
(python . :any))
|
||||||
"Python-specific header arguments.")
|
"Python-specific header arguments.")
|
||||||
|
|
||||||
(defcustom org-babel-python-command "python"
|
(defcustom org-babel-python-command 'auto
|
||||||
"Name of the command for executing Python code."
|
"Command (including arguments) for interactive and non-interactive Python code.
|
||||||
:version "24.4"
|
When not `auto', it overrides `org-babel-python-command-session'
|
||||||
:package-version '(Org . "8.0")
|
and `org-babel-python-command-nonsession'."
|
||||||
|
:package-version '(Org . "9.7")
|
||||||
|
:group 'org-babel
|
||||||
|
:type '(choice string (const auto)))
|
||||||
|
|
||||||
|
(defcustom org-babel-python-command-session 'auto
|
||||||
|
"Command (including arguments) for starting interactive Python sessions.
|
||||||
|
If `auto' (the default), uses the values from
|
||||||
|
`python-shell-interpreter' and `python-shell-interpreter-args'.
|
||||||
|
If `org-babel-python-command' is set, then it overrides this
|
||||||
|
option."
|
||||||
|
:package-version '(Org . "9.7")
|
||||||
|
:group 'org-babel
|
||||||
|
:type '(choice string (const auto)))
|
||||||
|
|
||||||
|
(defcustom org-babel-python-command-nonsession "python"
|
||||||
|
"Command (including arguments) for executing non-interactive Python code.
|
||||||
|
If `org-babel-python-command' is set, then it overrides this option."
|
||||||
|
:package-version '(Org . "9.7")
|
||||||
:group 'org-babel
|
:group 'org-babel
|
||||||
:type 'string)
|
:type 'string)
|
||||||
|
|
||||||
|
@ -246,6 +264,20 @@ be removed after minimum supported version reaches emacs29."
|
||||||
(buffer-substring-no-properties
|
(buffer-substring-no-properties
|
||||||
(car prompt) (cdr prompt)))))
|
(car prompt) (cdr prompt)))))
|
||||||
|
|
||||||
|
(defun org-babel-python--command (is-session)
|
||||||
|
"Helper function to return the Python command.
|
||||||
|
This checks `org-babel-python-command', and then
|
||||||
|
`org-babel-python-command-session' (if IS-SESSION) or
|
||||||
|
`org-babel-python-command-nonsession' (if not IS-SESSION). If
|
||||||
|
IS-SESSION, this might return `nil', which means to use
|
||||||
|
`python-shell-calculate-command'."
|
||||||
|
(or (unless (eq org-babel-python-command 'auto)
|
||||||
|
org-babel-python-command)
|
||||||
|
(if is-session
|
||||||
|
(unless (eq org-babel-python-command-session 'auto)
|
||||||
|
org-babel-python-command-session)
|
||||||
|
org-babel-python-command-nonsession)))
|
||||||
|
|
||||||
(defvar-local org-babel-python--initialized nil
|
(defvar-local org-babel-python--initialized nil
|
||||||
"Flag used to mark that python session has been initialized.")
|
"Flag used to mark that python session has been initialized.")
|
||||||
(defun org-babel-python--setup-session ()
|
(defun org-babel-python--setup-session ()
|
||||||
|
@ -267,13 +299,21 @@ initialized session."
|
||||||
(let* ((session (if session (intern session) :default))
|
(let* ((session (if session (intern session) :default))
|
||||||
(py-buffer (or (org-babel-python-session-buffer session)
|
(py-buffer (or (org-babel-python-session-buffer session)
|
||||||
(org-babel-python-with-earmuffs session)))
|
(org-babel-python-with-earmuffs session)))
|
||||||
(cmd (if (member system-type '(cygwin windows-nt ms-dos))
|
|
||||||
(concat org-babel-python-command " -i")
|
|
||||||
org-babel-python-command))
|
|
||||||
(python-shell-buffer-name
|
(python-shell-buffer-name
|
||||||
(org-babel-python-without-earmuffs py-buffer))
|
(org-babel-python-without-earmuffs py-buffer))
|
||||||
(existing-session-p (comint-check-proc py-buffer)))
|
(existing-session-p (comint-check-proc py-buffer))
|
||||||
(run-python cmd)
|
(cmd (org-babel-python--command t)))
|
||||||
|
(if cmd
|
||||||
|
(let* ((cmd-split (split-string-and-unquote cmd))
|
||||||
|
(python-shell-interpreter (car cmd-split))
|
||||||
|
(python-shell-interpreter-args
|
||||||
|
(combine-and-quote-strings
|
||||||
|
(append (cdr cmd-split)
|
||||||
|
(when (member system-type
|
||||||
|
'(cygwin windows-nt ms-dos))
|
||||||
|
(list "-i"))))))
|
||||||
|
(run-python))
|
||||||
|
(run-python))
|
||||||
(with-current-buffer py-buffer
|
(with-current-buffer py-buffer
|
||||||
(if existing-session-p
|
(if existing-session-p
|
||||||
;; Session was created outside Org. Assume first prompt
|
;; Session was created outside Org. Assume first prompt
|
||||||
|
@ -374,7 +414,7 @@ the last statement in BODY, as elisp. If GRAPHICS-FILE is
|
||||||
non-nil, then save graphical results to that file instead."
|
non-nil, then save graphical results to that file instead."
|
||||||
(let ((raw
|
(let ((raw
|
||||||
(pcase result-type
|
(pcase result-type
|
||||||
(`output (org-babel-eval org-babel-python-command
|
(`output (org-babel-eval (org-babel-python--command nil)
|
||||||
(concat preamble (and preamble "\n")
|
(concat preamble (and preamble "\n")
|
||||||
(if graphics-file
|
(if graphics-file
|
||||||
(format org-babel-python--output-graphics-wrapper
|
(format org-babel-python--output-graphics-wrapper
|
||||||
|
@ -382,8 +422,7 @@ non-nil, then save graphical results to that file instead."
|
||||||
body))))
|
body))))
|
||||||
(`value (let ((results-file (or graphics-file
|
(`value (let ((results-file (or graphics-file
|
||||||
(org-babel-temp-file "python-"))))
|
(org-babel-temp-file "python-"))))
|
||||||
(org-babel-eval
|
(org-babel-eval (org-babel-python--command nil)
|
||||||
org-babel-python-command
|
|
||||||
(concat
|
(concat
|
||||||
preamble (and preamble "\n")
|
preamble (and preamble "\n")
|
||||||
(format
|
(format
|
||||||
|
|
Loading…
Reference in New Issue