วิธีการบังคับให้ Python shell นำเข้าโมดูลอีกครั้งเมื่อใช้บัฟเฟอร์?


9

ฉันใช้ Cc Cc เพื่อส่งบัฟเฟอร์ไปยัง Python shell บัฟเฟอร์มีการนำเข้าที่จุดเริ่มต้น ฉันพบว่าถ้าฉันปรับเปลี่ยนโมดูลที่ฉันกำลังนำเข้าก็ไม่ได้สะท้อนการเปลี่ยนแปลงหากฉันเรียกใช้บัฟเฟอร์อีกครั้งด้วย Cc Cc (ดูเหมือนว่า Inferior Python กำลังทำการนำเข้าเพียงครั้งเดียว)

ฉันจะบังคับให้ Python shell นำเข้าโมดูลที่เรียกใช้ในบัฟเฟอร์ครั้งแรกได้อย่างไร

คำตอบ:



4

นี่คือขั้นตอนการทำงานของฉัน ฉันตั้งค่า emacs ให้ใช้ ipython

(setq
 python-shell-interpreter "ipython3"
 python-shell-interpreter-args "--simple-prompt --pprint")

จากนั้นใน ~ / .ipython / profile_default / startup / 00-ipython_init.py ฉันใส่สิ่งต่อไปนี้:

ip = get_ipython()
ip.magic('load_ext autoreload')

จากนั้นฉันพิมพ์สิ่งนี้เมื่อใดก็ตามที่ฉันแก้ไขและต้องการโหลดโมดูลของฉันใหม่ใน ipython ฉันชอบสิ่งนี้เพราะมันใช้ได้กับทุกโมดูลและฉันไม่ต้องกังวลกับการพึ่งพาการนำเข้า

%autoreload

1

คุณสามารถทำได้โดยการแก้ไข python-run และบังคับให้กระบวนการ Python รีสตาร์ท:

;; Run python and pop-up its shell.
;; Kill process to solve the reload modules problem.
(defun my-python-shell-run ()
  (interactive)
  (when (get-buffer-process "*Python*")
     (set-process-query-on-exit-flag (get-buffer-process "*Python*") nil)
     (kill-process (get-buffer-process "*Python*"))
     ;; Uncomment If you want to clean the buffer too.
     ;;(kill-buffer "*Python*")
     ;; Not so fast!
     (sleep-for 0.5))
  (run-python (python-shell-parse-command) nil nil)
  (python-shell-send-buffer)
  ;; Pop new window only if shell isnt visible
  ;; in any frame.
  (unless (get-buffer-window "*Python*" t) 
    (python-shell-switch-to-shell)))

(defun my-python-shell-run-region ()
  (interactive)
  (python-shell-send-region (region-beginning) (region-end))
  (python-shell-switch-to-shell))

(eval-after-load "python"
  '(progn
     (define-key python-mode-map (kbd "C-c C-c") 'my-python-shell-run)
     (define-key python-mode-map (kbd "C-c C-r") 'my-python-shell-run-region)
     (define-key python-mode-map (kbd "C-h f") 'python-eldoc-at-point)))

http://lgmoneda.github.io/2017/02/19/emacs-python-shell-config-eng.html


ทางออกที่ยอดเยี่ยม! คุณช่วยฉันสองสามชั่วโมง! ขอบคุณ!
DmitrySemenov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.