2011-08-04 4 views
3

atm私はいくつかのpythonコードを書くためにemacsを使っていますが、これまでは非常に問題ありません。emacsとpython更新モジュール

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

は、たぶんそこに誰かが同じ問題を抱えていたし、それはまだ助けが

答えて

2

をいただければ幸いあなたはそれを有効にするためにシェルで手動でモジュールをリロードする必要が解決しました。

私は、あなたが少なくとも所望の効果を(得るためのpython-mode.el機能を助言することができますが、here

0

を見ることができます同様の質問をPythonのリロード機能

上のドキュメントhereを参照してください。あなたの要求を正しく理解している場合)。あなたの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ファイルを保存するように求められます。 your previous questionへの返信に記載されている警告は引き続き適用されます(たとえば、インポートされたモジュールから既に作成されたクラスインスタンスがあり、他のオブジェクトなどのインスタンスを作成している場合は、再読み込みされません)。一般的な破損が起こる可能性がありますので、注意してください!)。

1

私はEmacsの設定を必要としない良く解決策が見つかりました:

は単に

$HOME/.ipython/profile_default/ipython_config.py 

にプロファイルipython作成する必要があります

$ ipython profile create 

が、その後

内の以下を置けばいいの
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は、それが自動的に

、あなたは私の完全なPythonの設定を確認したい場合、私は私の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) 

に持っ以下、それはhereをだリロードします

関連する問題