модули обновления emacs и python - PullRequest
3 голосов
/ 04 августа 2011

atm Я использую emacs для написания некоторого кода на Python, но пока он работает довольно хорошо, за исключением одной проблемы, которая действительно немного раздражает.

Всегда, когда я обновляю что-то внутри самостоятельно написанного модуля, я переоцениваюбуфер и модуль в оболочке python внутри emacs не обновляются.Мне всегда нужно завершить процесс Python и запустить его снова, чтобы получить изменения.Я понял, что emacs копирует некоторые вещи в каталог tmp для их выполнения, поэтому я думаю, что это как-то связано с этим.

Может быть, кто-то там имел такую ​​же проблему и уже решил ее, поэтому помощь будет принята

Ответы [ 3 ]

2 голосов
/ 05 августа 2011

Вы должны перезагрузить модуль вручную в оболочке, чтобы он вступил в силу.

См. Документацию здесь о функции перезагрузки Python

Я спросилпохожий вопрос, который вы можете увидеть здесь

1 голос
/ 27 сентября 2016

Я нашел решение лучше , которое не требует настройки emacs:

просто выполните

$ ipython profile create

, которое должно создать профиль ipython в

$HOME/.ipython/profile_default/ipython_config.py  

затем поместите следующее внутри

c = get_config()
c.TerminalInteractiveShell.editor = 'emacsclient'
c.InteractiveShellApp.extensions = [
     'autoreload'
]

c.InteractiveShellApp.exec_lines = []
c.InteractiveShellApp.exec_lines.append('%load_ext autoreload')
c.InteractiveShellApp.exec_lines.append('%autoreload 2')

и перезапустите emacs.Теперь каждый раз, когда вы сохраняете изменения в файле внутри emacs - ipython будет автоматически перезагружать его автоматически

и следующее, что у меня есть в моей конфигурации emacs

;; ------------------
;; misc python config
;; ------------------
(company-mode -1)
(elpy-enable)
(elpy-use-ipython "ipython")
(setq python-shell-interpreter "ipython" python-shell-interpreter-args "--simple-prompt --pprint")
(setq python-check-command "flake8")
(setq elpy-rpc-backend "jedi")
(setq elpy-rpc-python-command "python")
; https://github.com/gregsexton/ob-ipython/issues/28
(setq python-shell-completion-native-enable nil)

, если вы хотитепосмотрите мой полный конфиг python, здесь

0 голосов
/ 06 августа 2011

Вы можете посоветовать функцию python-mode.el для получения желаемого эффекта (по крайней мере, если я правильно понимаю ваш запрос).Поместите в ваш файл инициализации Emacs следующее:

(defun py-reload-file (buf)
  "Reload buffer's file in Python interpreter."
  (let ((file (buffer-file-name buf)))
    (if file
        (progn
          ;; Maybe save some buffers
          (save-some-buffers (not py-ask-about-save) nil)
          (let ((reload-cmd
                 (if (string-match "\\.py$" file)
                     (let ((f (file-name-sans-extension
                               (file-name-nondirectory file))))
                       (format "if globals().has_key('%s'):\n    reload(%s)\nelse:\n    import %s\n"
                               f f f))
                   (format "execfile(r'%s')\n" file))))
            (save-excursion
              (set-buffer (get-buffer-create
                           (generate-new-buffer-name " *Python Command*")))
              (insert reload-cmd)
              (py-execute-base (point-min) (point-max))))))))

(defadvice py-execute-region
  (around reload-in-shell activate)
  "After execution, reload in Python interpreter."
  (save-window-excursion 
    (let ((buf (current-buffer)))
      ad-do-it
      (py-reload-file buf))))

Теперь, когда вы находитесь в программе на python, вы можете выбрать область кода, нажмите C- | , чтобы оценитьрегион и программа Python будут перезагружены (или импортированы, если не были загружены ранее) в буфер интерпретатора Python.Модуль ENTIRE будет перезагружен, а не только выбранный регион, и вам будет предложено сохранить файл python, если он еще не был сохранен.Обратите внимание, что предостережения, которые были упомянуты в ответах на ваш предыдущий вопрос , по-прежнему применяются (например, - если у вас уже есть экземпляры классов, созданные из импортированного модуля, были созданы экземпляры других объектов и т. Д., Они не будут перезагружены).Может произойти общая поломка, так что будьте бдительны!).

...