Come forzare una shell Python a reimportare i moduli quando si esegue un buffer?


9

Sto usando Cc Cc per inviare un buffer a una shell Python. Il buffer ha un'importazione all'inizio. Ho scoperto che se modifico il modulo che sto importando, non riflette le modifiche se eseguo nuovamente il buffer con Cc Cc (sembra che Inferior Python stia eseguendo l'importazione una sola volta).

Come posso forzare la shell Python a importare nuovamente i moduli già chiamati nella prima esecuzione del buffer?

Risposte:



4

Questo è il mio flusso di lavoro. Ho impostato emacs per usare ipython

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

Quindi in ~ / .ipython / profile_default / startup / 00-ipython_init.py ho inserito quanto segue:

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

Quindi lo digito ogni volta che modifico e voglio ricaricare i miei moduli in ipython. Mi piace perché funziona per tutti i moduli e non devo preoccuparmi delle dipendenze di importazione.

%autoreload

1

Puoi farlo modificando l'esecuzione di Python e forzando il riavvio del processo 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


Soluzione meravigliosa! Mi hai risparmiato poche ore! Grazie!
DmitrySemenov il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.