3

atm 私はいくつかの Python コードを書くために emacs を使用しています。

自己記述モジュール内で何かを更新するときは常に、バッファーを再評価し、emacs 内の Python シェル内のモジュールが更新されません。私は常にpythonプロセスを終了し、変更を取得するために再度開始する必要があります。emacsがいくつかのものをtmpディレクトリにコピーして実行することがわかったので、これと関係があると思います。

たぶん、誰かが同じ問題を抱えていて、すでに解決しているので、助けていただければ幸いです

4

4 に答える 4

2

モジュールを有効にするには、シェルでモジュールを手動でリロードする必要があります。

Python reload 関数については、こちらのドキュメントを参照してください。

ここで見ることができる同様の質問をしました

于 2011-08-05T17:04:57.590 に答える
2

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 構成を見たい場合は、ここにあります

于 2016-09-27T01:47:54.577 に答える
0

python-mode.el 関数にアドバイスして、目的の効果を得ることができます (少なくとも、私があなたの要求を正しく理解している場合)。Emacs の init ファイルに以下を記述してください:

(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 インタープリター バッファーに再読み込み (または、まだ読み込まれていない場合はインポート) されます。選択された領域だけでなく、モジュール全体がリロードされ、まだ保存されていない場合は、python ファイルを保存するように求められます。以前の質問への回答で言及された警告が引き続き適用されることに注意してください(たとえば、インポートされたモジュールからクラス インスタンスが既に作成されている場合、他のオブジェクトをインスタンス化している場合など、それらは再読み込みされません)。一般的な破損が発生する可能性があるため、注意してください!)。

于 2011-08-05T21:37:36.073 に答える