Doom-emacs: [BUG] ob-async مع emacs-jupyter

تم إنشاؤها على ١٦ ديسمبر ٢٠١٩  ·  30تعليقات  ·  مصدر: hlissner/doom-emacs

ماذا تتوقع أن يحدث؟
انظر إخراج كتلة المصدر في قسم النتائج

ماذا حدث بالتحديد؟
يتم إخراجها بشكل صحيح في المرة الأولى ، ولكن بعد ذلك يتم إخراج كود ob-async

تفاصيل اضافية:
image

Backtrace:

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. أضف jupyter إلى الحزم .el (package! jupyter)
  2. لديك بيئة عمل جيدة
  3. قم بتشغيل الكود كما في لقطة الشاشة في ملف org
#+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) بدلاً من ذلك. من المحتمل أن تقوم حزمة jupyter emacs بشيء غير قياسي.

حاول أيضًا إضافة :async yes أو :async no إلى كتل src الخاصة بك ومعرفة ما إذا كان ذلك يحدث فرقًا.

تكمن مشكلة ob-ipython في أنني لا أستطيع استخدام بيئة مفعلة باستخدام + conda. كما يبدو أن ob-ipython يفقد الدعم.

كنت أرغب في تجربة emacs-jupyter ، حيث كانت قادرة على التقاط بيئة conda افتراضيًا ولديها أيضًا إمكانية استخدام R والنواة البعيدة.

كيف يمكنني إضافة Jupyter إلى org babel إذا لم يكن بـ org-babel-do-load-languages ؟

emacs-jupyter لا يستخدم ob-async . يجب أن يكون لديك الإعداد التالي لـ Jupyter للعمل بشكل صحيح.

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

لقد أضفت ميزة +jupyter إلى :lang org والتي تعين ob-async-no-async-languages-alist و +org-babel-load-functions . اسمحوا لي أن أعرف إذا كان ذلك يحل مشكلتك.

شكرا لك randomizedthinking و @ hlissner على مساعدتك.

بعد إضافة +jupyter في تكوين المؤسسة .doom.d/init.el, it seems babel does not pick up that language: org-babel-execute-src-block: لا توجد وظيفة تنفيذ org-babel لـ jupyter-python!

أيضًا ، يمكن استخدام emacs-jupyter كبديل مباشر لملفات python. إنه ليس مجرد تكامل مع وضع org مثل ob-ipython. لأقول لك الحقيقة ، أنا جديد على الموت / emacs وبالكاد استخدم emacs-jupyter ، لكن يمكنني أن أرى أن البديل المقدم من emacs-jupyter متفوق بشكل كبير ، حيث يوفر إكمال تلقائي قوي ، ودعمًا للصور المخزنة مؤقتًا ، إلخ. .

كل هذا يسأل ، هل يستحق 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 في إطار عمل dom emacs.

شكرا أيضا لتقاسم keybindings. بالنسبة لجميع وظائف التقييم ، يمكننا استخدام عامل التشغيل الحالي 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 . تم تعطيله في 3b2a37d9a لأنه يتداخل مع محمل Doom الكسول ، على أي حال.

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's عبارة عن مكون إضافي بابل منظم للغاية).

تحقق مما إذا كانت إضافة هذا إلى ملف 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)))))

حسنا. لكنها تستمر بنفس السلوك ، كما هو موضح أدناه:

كيف هو في أول زيارة للملف
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

والمرة الثانية تعمل:

executing Jupyter-Python code block...
Starting python3 kernel process...done
Requesting kernel info...done
Code block evaluation complete. [2 times]

رغم ذلك ، قد يكون هذا هو السلوك الصحيح ، اعتقدت أنني سأذكره.

لقد كتبت للتو بعض التحسينات لـ Jupyter في af948ca. يُرجى التحديث وإخباري إذا كان ذلك قد أدى إلى حل المشكلة (وإزالة الاقتراحات +org-babel-load-functions و +org--src-lazy-load-library-a التي قدمتها لك حتى الآن).

مثالي ، لذا فإن تنفيذ كتلة المصدر يعمل الآن دون أي تعديل على config.el.

ومع ذلك ، لا تزال مشكلة التمييز قائمة.

شكرا جزيلا لكم على عملكم.

أعلم أنه يتعين علينا تحميل _ إحدى_ مكتبات Jupyter ، لكني لا أعرف أي واحدة ومتى. سيكون هذا أسرع بكثير إذا كان لدي بيئة 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-و org-babel-tangle-lang-exts. بعد تحميل ob-jupyter ، ستتوفر كتل كود مصدر جديدة بأسماء النموذج jupyter-LANG. يمكن أن تكون LANG أي لغة من لغات kernel الموجودة في نظامك. انظر 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 ...) ؟

كل عمل مما يمكنني رؤيته !! :د

تسليط الضوء ، كتلة التنفيذ والتحرير الخاص. لذلك لست متأكدًا من شعورك تجاه الحل ، لكنني سعيد جدًا لأنه يعمل :)

شكرا لك!!

مرحبا! أعتقد أن شيئًا ما هنا ربما كسر دعم R في وضع org باستخدام المكون الإضافي Jupyter. تنفيذ كتل jupyter-python يعمل بشكل جيد:
Screen Shot 2020-02-13 at 2 01 09 PM
لكن تنفيذ كتل jupyter-R لا:
Screen Shot 2020-02-13 at 2 02 10 PM
هل من نصيحة عن كيفية التقدم؟

mbosley https://github.com/hlissner/doom-emacs/pull/2477 من المحتمل أن يصلح مشكلتك.

في غضون ذلك ، سأغلق هذا الموضوع منذ أن تم حل مشكلة OP.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات