Doom-emacs: [バグ] ob-emacs-jupyterと非同期

作成日 2019年12月16日  ·  30コメント  ·  ソース: hlissner/doom-emacs

何が起こると思いましたか?
結果セクションのソースブロックの出力を参照してください

実際に何が起こったのですか?
最初は正しく出力しますが、その後ob-asyncコードを出力します

追加の詳細:
image

バックトレース:

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")

再現する手順:

  1. packages.elにjupyterを追加します(package! jupyter)
  2. Jupyter環境が機能している
  3. 組織ファイルのスクリーンショットのようにコードを実行します
#+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")))

:lang org new resolved-temporarily

全てのコメント30件

これをプライベート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)に切り替えてみてください。 jupyteremacsパッケージが非標準の処理を行っている可能性があります。

また、srcブロックに:async yesまたは:async noを追加して、違いが生じるかどうかを確認してください。

ob-ipythonの問題は、+ condaでアクティブ化された環境を使用できないように見えることです。 また、ob-ipythonはサポートを失っているようです。

デフォルトでconda環境を取得でき、Rおよびリモートカーネルを使用する可能性もあるため、emacs-jupyterを試してみたかったのです。

org-babel-do-load-languagesない場合、どうすればjupyterをorg babelに追加できますか?

emacs-jupyterob-async使用しません。 jupyterが正しく機能するには、次の設定が必要です。

(setq ob-async-no-async-languages-alist
      '("jupyter-python"))

ob-async-no-async-languages-alist+org-babel-load-functionsを設定する+jupyter機能を:lang org追加しました。 それで問題が解決するかどうか教えてください。

@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ファイルの直接のreplとして使用できます。 これは、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ドキュメントごとに、言語python (またはjupyterで使用する予定の他の言語)をjupyter前に含める必要があります。

(org-babel-do-load-languages
 'org-babel-load-languages
 '((shell . t)
   (emacs-lisp . t)
   (python . t)
   (jupyter . t)))

次に、emacs-jupyterがdoomemacsフレームワークに統合されれば素晴らしいと思います。

キーバインディングを共有していただきありがとうございます。 すべての評価関数に対して、現在のdoom gr演算子を使用できます。これは、一貫したクロスドゥームreplになります。

@ pmercatoris17d0833で問題が解決するかどうかを確認してください。

それがうまくいかない場合は、 +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では無効になっています。

@ hlissner17d0833もオーバーライドも機能していないようです。

取得: 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)))))

OK。 ただし、以下に示すように、同じ動作を続けます。

ファイルの最初の訪問はどうですか
image

セルを実行し、ファイルに再度アクセスします。
image

更新されたスニペットを試しましたか? 投稿して間もなく改善しました。

はい、更新されたスニペットを使用します。 これが私の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

そして2回目はそれが機能します:

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のライブラリを1つロードする必要があることはわかっていますが、どれをいつロードするかはわかりません。 テストする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 hahaは、私がまだ同じ振る舞いをするので、あまり複雑ではないようです:-(

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 ...) (after! org-src ...)使用して、私のダムソリューションをもう一度試していただけませんか?

私が見ることができるものからすべて働いています! :D

ハイライト、ブロック実行、特別編集。 だから私はあなたが解決策についてどう感じているかわかりませんが、それがうまくいったことをとてもうれしく思います:)

ありがとうございました!!

こんにちは! ここで何かがJupyterプラグインを使用したorg-modeでのRサポートを壊した可能性があると思います。 jupyter-pythonブロックの実行は正常に機能します:
Screen Shot 2020-02-13 at 2 01 09 PM
ただし、jupyter-Rブロックの実行は次のことを行いません。
Screen Shot 2020-02-13 at 2 02 10 PM
続行する方法について何かアドバイスはありますか?

@mbosleyhttps ://github.com/hlissner/doom-emacs/pull/2477で問題が解決する可能性があります。

それまでの間、OPの問題が解決されたので、このスレッドを閉じます。

このページは役に立ちましたか?
0 / 5 - 0 評価