您期望发生什么?
在结果部分中查看源代码块的输出
实际发生了什么?
第一次正确输出,但是随后输出ob-async代码
额外细节:
回溯:
Debugger entered--Lisp error: (file-missing "Cannot open load file" "No such file or directory" "ob-jupyter-python")
signal(file-missing ("Cannot open load file" "No such file or directory" "ob-jupyter-python"))
async-handle-result((lambda (result) (with-current-buffer #<buffer google_maps.org> (let ((default-directory "/home/pim/git/myMinsait/smartwaste/sprint20/")) (save-excursion (cond ((member "none" ...) (message "result silenced")) ((member "silent" ...) (message ...)) (t (goto-char #<marker at 692 in google_maps.org>) (let ... ... ... ...))) (run-hooks 'org-babel-after-execute-hook))))) (async-signal (file-missing "Cannot open load file" "No such file or directory" "ob-jupyter-python")) #<buffer *emacs*>)
async-when-done(#<process emacs> "finished\n")
重现步骤:
(package! jupyter)
#+begin_src jupyter-python :session py :results raw drawer
%matplotlib inline
import numpy as np
import pandas as pd
x = np.linspace(1,100, 10)
y = np.random.normal(size=10)*x
df = pd.DataFrame({'x':x, 'y':y})
df.plot(x='x', y='y')
#+end_src
系统信息:
Compiling your literate config...
Tangled 0 code blocks from config.org
Done!
((emacs
(version . "27.0.50")
(features . "XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM DBUS GLIB NOTIFY INOTIFY ACL GNUTLS LIBXML2 FREETYPE HARFBUZZ LIBOTF ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON PDUMPER LCMS2 GMP")
(build . "dic 05, 2019")
(buildopts "--prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib --localstatedir=/var --mandir=/usr/share/man --with-gameuser=:games --with-sound=alsa --with-modules --without-gconf --without-gsettings --enable-link-time-optimization --with-x-toolkit=gtk3 --without-xaw3d --without-m17n-flt --with-cairo --without-compress-install 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt -flto -fuse-linker-plugin -flto -fuse-linker-plugin -fuse-ld=gold' CPPFLAGS=-D_FORTIFY_SOURCE=2 LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now")
(windowsys . batch)
(daemonp . server-running))
(doom
(version . "2.0.9")
(build . "HEAD -> develop 207ce02a3 2019-12-16 05:45:27 -0500"))
(system
(type . gnu/linux)
(config . "x86_64-pc-linux-gnu")
(shell . "/usr/bin/zsh")
(uname . "Linux 4.19.88-1-MANJARO #1 SMP PREEMPT Thu Dec 5 11:04:44 UTC 2019 x86_64")
(path "~/anaconda3/envs/waste/bin" "~/anaconda3/condabin" "~/.local/bin" "/usr/local/bin" "/usr/local/sbin" "/usr/bin" "/usr/lib/jvm/default/bin" "/usr/bin/site_perl" "/usr/bin/vendor_perl" "/usr/bin/core_perl" "/usr/lib/emacs/27.0.50/x86_64-pc-linux-gnu"))
(config
(envfile . envvar-file)
(elc-files . 0)
(modules :completion company ivy :ui doom doom-dashboard doom-quit hl-todo modeline nav-flash ophints (popup +all +defaults) treemacs vc-gutter vi-tilde-fringe window-select workspaces :editor (evil +everywhere) file-templates fold multiple-cursors rotate-text snippets word-wrap :emacs dired electric ibuffer vc :term eshell :tools docker (eval +overlay) flycheck (lookup +docsets) lsp magit :lang data emacs-lisp markdown (org +dragndrop +ipython +pandoc +present) (python +lsp +conda) sh :config literate (default +bindings +smartparens))
(packages jupyter)
(elpa "n/a")))
尝试将其添加到您的私有config.el中:
(add-hook! '+org-babel-load-functions
(defun +org-babel-load-jupyter-h (lang)
(and (string-prefix-p "jupyter-" (symbol-name lang))
(require lang nil t))))
感谢您的快速回复。 不幸的是,它不能解决问题。
我还尝试了一个简单的代码块:
#+begin_src jupyter-python :session py :results raw drawer
print('test')
#+end_src
#+RESULTS:
: test
#+begin_src jupyter-python :session py :results raw drawer
print('test')
#+end_src
#+RESULTS:
: c172bf02f62c4210de534c8e3147198b
这是我当前的配置(“新用户”):
;;; .doom.d/config.el -*- lexical-binding: t; -*-
;; Place your private configuration here
(def-package! org
:config
;; (setq python-shell-interpreter "/home/pim/anaconda3/bin/python3")
;; (setq org-babel-python-command "/home/pim/anaconda3/bin/python3")
(setq python-shell-interpreter-args "-m IPython --simple-prompt -i")
(org-babel-do-load-languages
'org-babel-load-languages
'((latex . t)
(python . t)
(shell . t)
(sql . t)
(jupyter . t))))
(add-hook! '+org-babel-load-functions
(defun +org-babel-load-jupyter-h (lang)
(and (string-prefix-p "jupyter-" (symbol-name lang))
(require lang nil t))))
删除org-babel-do-load-languages
呼叫。 Doom自己针对babel插件的延迟加载机制是多余的。 不知道它是否可以解决您的问题,但可以。
否则,请尝试从jupyter软件包切换到:lang (org +ipython)
。 jupyter emacs软件包可能正在执行某些非标准的操作。
另外,尝试将:async yes
或:async no
到您的src块中,看看是否有区别。
ob-ipython的问题在于,我似乎无法使用通过+ conda激活的环境。 ob-ipython似乎也失去了支持。
我想尝试emacs-jupyter,因为它默认情况下可以拾取conda环境,并且还具有使用R和远程内核的潜力。
如果不使用org-babel-do-load-languages
如何将jupyter添加到org babel?
emacs-jupyter
不使用ob-async
。 您需要具有以下设置,jupyter才能正常工作。
(setq ob-async-no-async-languages-alist
'("jupyter-python"))
我在:lang org
中添加了+jupyter
功能,该功能设置了ob-async-no-async-languages-alist
和+org-babel-load-functions
。 让我知道是否可以解决您的问题。
谢谢@randomizedthinking和@hlissner的帮助。
在.doom.d/init.el, it seems babel does not pick up that language:
的org配置中添加+jupyter
,org-babel-execute-src-block:jupyter-python没有org-babel-execute功能!
另外,emacs-jupyter可以用作python文件的直接复制。 它不仅像ob-ipython这样与org-mode集成。 实话实说,我是doom / emacs的新手,几乎没有使用过emacs-jupyter,但是我可以看到emacs-jupyter提供的repl非常优越,它提供了强大的自动完成功能,对缓冲内图像的支持等。 。
所有这些要问,emacs-jupyter是否应将其设置作为python模块的一部分?
尽管我的知识非常有限,但我愿意尽一切可能为您提供帮助。
同时,我将此添加到我的配置文件中:
(use-package! jupyter
:defer t
:init
(map! :after python
:map python-mode-map
:localleader
(:prefix ("j" . "jupyter")
:desc "Run REPL" "o" #'jupyter-run-repl
:desc "Eval funciton" "f" #'jupyter-eval-defun
:desc "Eval buffer" "b" #'jupyter-eval-buffer
:desc "Eval region" "r" #'jupyter-eval-region
:desc "Restart REPL" "R" #'jupyter-repl-restart-kernel
:desc "Interrupt REPL" "i" #'jupyter-repl-interrup-kernel
:desc "Scratch buffer" "s" #'jupyter-repl-scratch-buffer
:desc "Remove overlays" "O" #'jupyter-eval-remove-overlays
:desc "Eval string" "w" #'jupyter-eval-string
:desc "Inspect at point" "d" #'jupyter-inspect-at-point
)))
目前看来,它运作良好。
只有与orgmode的集成似乎被破坏了。
@pmercatoris为了让jupyter在org-babel中工作,我的当前设置如下。 对于每个emacs-jupyter文档,需要在jupyter
之前包括语言python
(或我们计划与jupyter一起使用的任何其他语言)。
(org-babel-do-load-languages
'org-babel-load-languages
'((shell . t)
(emacs-lisp . t)
(python . t)
(jupyter . t)))
我第二个观点是,如果将emacs-jupyter集成到厄运的emacs框架中,那就太好了。
也感谢您分享键绑定。 对于所有评估函数,我们可以使用当前的厄运gr
运算符-这将是一致的交叉厄运表示法。
@pmercatoris查看17d0833是否解决了您的问题。
如果这样不起作用,请查看覆盖+org-babel-load-jupyter-h
有帮助,例如:
(defun +org-babel-load-jupyter-h (lang)
(and (string-prefix-p "jupyter-" (symbol-name lang))
(require 'ob-python)
(require lang nil t)))
@randomizedthinking请在没有org-babel-do-load-languages
情况下尝试。 在任何情况下,由于它会干扰Doom的惰性加载程序,因此已在3b2a37d9a中将其禁用。
@hlissner 17d0833和覆盖都不起作用。
我得到: org-babel-execute-src-block: No org-babel-execute function for jupyter-python!
没有突出显示源代码块
好的,所以我将此添加到了.doom.d / config.el中,现在可以使用了! :)
(add-hook! '+org-babel-load-functions
(defun +org-babel-load-jupyter-h (lang)
(and (string-prefix-p "jupyter-" (symbol-name lang))
(require 'ob-jupyter)
(require lang nil t))))
唯一的问题是,首次访问文件时不会加载源代码块突出显示。 执行源代码块后,我需要重新访问。 那是故意的吗?
太好了,在找出您的代码块突出显示问题之后,我将添加+ jupyter子模块(这不是故意的,我们有一个用于块突出显示的惰性加载器,但是jupyter的是一个非常不寻常的结构化babel插件)。
查看是否将此添加到您的config.el中可以解决此问题:
(after! org
(defadvice! +org--src-lazy-load-library-a (lang)
"Lazy load a babel package to ensure syntax highlighting."
:before #'org-src--get-lang-mode
(unless (cdr (assoc lang org-src-lang-modes))
(or (run-hook-with-args-until-success '+org-babel-load-functions lang)
(require (intern-soft (format "ob-%s" lang)) nil t)
(require lang nil t)))))
好。 但是它仍然具有相同的行为,如下所示:
第一次访问文件时情况如何
执行一个单元并重新访问文件:
您是否尝试过更新的代码段? 发布后不久,我对其进行了改进。
是的,带有更新的代码段。 这是我的config.el:
;;; .doom.d/config.el -*- lexical-binding: t; -*-
;; Place your private configuration here
;;
(setq python-shell-interpreter "ipython"
python-shell-interpreter-args "--simple-prompt -i")
(after! org
(defadvice! +org--src-lazy-load-library-a (lang)
"Lazy load a babel package to ensure syntax highlighting."
:before #'org-src--get-lang-mode
(unless (cdr (assoc lang org-src-lang-modes))
(or (run-hook-with-args-until-success '+org-babel-load-functions lang)
(require (intern-soft (format "ob-%s" lang)) nil t)
(require lang nil t)))))
(add-hook! '+org-babel-load-functions
(defun +org-babel-load-jupyter-h (lang)
(and (string-prefix-p "jupyter-" (symbol-name lang))
(require 'ob-jupyter)
(require lang nil t))))
;; Select window between frames
(after! ace-window
(setq aw-scope 'global))
;;;
;;; Keybinds
(setq doom-localleader-key ",")
(use-package! jupyter
:defer t
:init
(map! :after python
:map python-mode-map
:localleader
(:prefix ("j" . "jupyter")
:desc "Run REPL" "o" #'jupyter-run-repl
:desc "Eval funciton" "f" #'jupyter-eval-defun
:desc "Eval buffer" "b" #'jupyter-eval-buffer
:desc "Eval region" "r" #'jupyter-eval-region
:desc "Restart REPL" "R" #'jupyter-repl-restart-kernel
:desc "Interrupt REPL" "i" #'jupyter-repl-interrupt-kernel
:desc "Scratch buffer" "s" #'jupyter-repl-scratch-buffer
:desc "Remove overlays" "O" #'jupyter-eval-remove-overlays
:desc "Eval string" "w" #'jupyter-eval-string-command
:desc "Inspect at point" "d" #'jupyter-inspect-at-point
:desc "Associate buffer REPL" "B" #'jupyter-repl-associate-buffer
)))
使用上面的代码,尝试将+org-babel-load-jupyter-h
修改为:
(defun +org-babel-load-jupyter-h (lang)
(and (string-prefix-p "jupyter-" (symbol-name lang))
(require (intern
(format "ob-%s"
(string-remove-prefix "jupyter-" (symbol-name lang))))
nil t)
(require 'ob-jupyter nil t)
(require lang nil t)))
不幸的是,这也不起作用。
如果它可能被链接。 源块仅在2 x Cc,Cc之后执行
第一次响应:
executing Jupyter-Python code block...
org-babel-jupyter-session-key: Need a valid session and a kernel to form a key
第二次工作:
executing Jupyter-Python code block...
Starting python3 kernel process...done
Requesting kernel info...done
Code block evaluation complete. [2 times]
虽然,这可能是正确的行为,但我想我会提一下。
我刚刚在af948ca中为jupyter编写了一些改进。 请更新,并让我知道它是否可以解决问题(并删除我到目前为止提供的+org-babel-load-functions
和+org--src-lazy-load-library-a
建议)。
完美,因此无需修改config.el就可以执行源代码块。
但是,突出显示的问题仍然存在。
非常感谢您的工作。
我知道我们必须加载jupyter库的_one_,但是我不知道哪个库和哪个库。 如果我要在jupyter环境中进行测试,则速度会更快。也许每个模块都应包含一个nix文件,以设置一个最低的可行环境进行测试。
无论如何,您可以尝试一下吗?
(defadvice! oh-god-please-fix-jupyter-please-oh-please (lang)
:override #'+org-babel-load-jupyter-h
(when (string-prefix-p "jupyter-" (symbol-name lang))
(let ((lang (string-remove-prefix "jupyter-" (symbol-name lang))))
(unless (assoc lang org-src-lang-modes)
(require (intern (format "ob-%s" lang))
nil t)))
(with-demoted-errors "Jupyter: %s"
(require 'jupyter nil t)
(require lang nil t)
(require 'ob-jupyter nil t))))
oh-god-please-fix-jupyter-please-oh-please
哈哈似乎没有很多补偿,因为我仍然得到相同的行为:-(
对Nix一无所知,但绝对听起来像是个不错的功能。
可以链接到此评论吗?
请注意,在加载语言时,应该将jupyter作为最后一个元素添加,因为它取决于诸如org-src-lang-modes和org-babel-tangle-lang-exts之类的变量的值。 加载ob-jupyter后,将使用名称为jupyter-LANG形式的新源代码块。 LANG可以是系统上找到的任何一种内核语言。 参见jupyter-available-kernelspecs。(https://github.com/dzop/emacs-jupyter#org-mode-source-blocks)
可以链接到此评论吗?
是的,但是我已经用+org-babel-load-jupyter-h
注意了这一点,但是它仍然拒绝工作。 因此,让我们再尝试一次:
(defadvice! oh-god-please-fix-jupyter-please-oh-please (lang)
:override #'+org-babel-load-jupyter-h
(when (string-prefix-p "jupyter-" (symbol-name lang))
(let* ((lang-name (symbol-name lang))
(lang-tail (string-remove-prefix "jupyter-" lang-name)))
(and (not (assoc lang-tail org-src-lang-modes))
(require (intern (format "ob-%s" lang-tail))
nil t)
(add-to-list 'org-src-lang-modes (cons lang-name (intern lang-tail)))))
(with-demoted-errors "Jupyter: %s"
(require lang nil t)
(require 'ob-jupyter nil t))))
如果这不起作用,那么我们将诉诸愚蠢的解决方案:
(after! ob-jupyter
(dolist (lang '(python julia R))
(cl-pushnew (cons (format "jupyter-%s" lang) lang)
org-src-lang-modes :key #'car)))
我知道这行得通,但是随着jupyter引入更多语言,我将不得不依靠人们来扩展此列表。
因此,显然,即使是笨拙的解决方案也不能用于突出显示。 但更重要的是,似乎org-edit-special
无效,因为它返回:
org-edit-src-code: No such language mode: jupyter-python-mode
我确实希望我已经尝试了所有正确的方法,正如我说的,我对厄运是陌生的,但是请确保在进行任何更改后都进行doom refresh
。
哦,糟糕您能否使用(after! org-src ...)
而不是(after! ob-jupyter ...)
再次尝试我的哑巴解决方案?
从我所看到的所有工作! :D
突出显示,块执行和特殊编辑。 所以我不确定您对解决方案的感觉如何,但是很高兴它能起作用:)
谢谢!!
嗨! 我认为这里有些东西使用Jupyter插件可能破坏了组织模式下的R支持。 执行jupyter-python块效果很好:
但是执行jupyter-R块不会:
有关如何进行的任何建议?
@mbosley https://github.com/hlissner/doom-emacs/pull/2477将可能解决您的问题。
同时,由于OP的问题已解决,因此我将关闭此线程。