Comment forcer un shell Python à réimporter des modules lors de l'exécution d'un tampon?


9

J'utilise Cc Cc pour envoyer un tampon à un shell Python. Le tampon a une importation au début. J'ai trouvé que si je modifie le module que j'importe, il ne reflète pas les changements si je lance à nouveau le tampon avec Cc Cc (il semble que le Python inférieur n'effectue l'importation qu'une seule fois).

Comment puis-je forcer le shell Python à réimporter les modules déjà appelés lors de la première exécution du tampon?

Réponses:



4

Ceci est mon flux de travail. J'ai mis emacs pour utiliser ipython

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

Puis dans ~ / .ipython / profile_default / startup / 00-ipython_init.py je mets ce qui suit:

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

Ensuite, je tape ceci chaque fois que je modifie et que je veux recharger mes modules en ipython. J'aime cela car cela fonctionne pour tous les modules et je n'ai pas à me soucier des dépendances d'importation.

%autoreload

1

Vous pouvez le faire en modifiant l'exécution de python et en forçant le processus Python à redémarrer:

;; 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


Magnifique solution! Tu m'as sauvé quelques heures! Je vous remercie!
DmitrySemenov
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.