17

私は Emacs を使って Python 2 コードを書いています。現在、システムに Python 2.6 と 3.0 の両方がインストールされており、Python 3 コードも記述する必要があります。

/usr/bin で異なるバージョンを設定する方法は次のとおりです。

python -> python2.6*
python2 -> python2.6*
python2.6*

python3 -> python3.0*
python3.0*

使用している言語に応じて、Emacs が正しいバージョンの Python を使用するように設定する方法はありますか? たとえば、Cc Cc は現在バッファを実行していますが、Python 3 コードを書いている場合でも、常に python2.6 を呼び出します。

4

5 に答える 5

10

python-mode.el を使用している場合は、変更を試みることができますpy-which-shell。これをファイルごとに行うには、次のようにします

# -*- py-which-shell: "python3"; -*-

ファイルの最初の行、または最初の行が で始まる場合は 2 行目#!。別の選択肢は、置くことです

# Local Variables:
# py-which-shell: "python3" 
# End: 

ファイルの最後に。おそらく、「python3」だけでなく、python3 へのフル パスを指定する必要があります。

于 2009-02-02T07:14:45.833 に答える
4

答えはイエスです。Python 2 と Python 3 を区別できるのであれば、emacs でやりたいことを実行させるのはプログラミングの簡単なことです。

(define run-python (&optional buffer)
    (with-current-buffer (or buffer (current-buffer))
        (if (is-python3-p)
              (run-python3)
            (run-python2))))

(define-key python-mode-map (kbd "C-c C-c") #'run-python)

あとは実装is-python3-prun-python3(など)だけです。

于 2009-02-02T05:49:42.747 に答える
3

この答えについての私のコメント。

/t/min.pyを作成しました。これは、python3では正常に実行されますが、python2では実行されません(辞書の理解はpython3で機能します)

/t/min.pyの内容

#!/usr/bin/python3
# -*- py-python-command: "/usr/bin/python3"; -*-
a = {i:i**2 for i in range(10)}
print(a)

shebangはpython3とファイルローカル変数py-python-commandも示していることに注意してください。

また、/ t / min-py.elを作成しました。これにより、python.elの代わりにpython-mode.el(ver 5.1.0)が使用されるようになります。

/t/min-py.elの内容

(add-to-list 'load-path "~/m/em/lisp/")
(autoload 'python-mode "python-mode" "Python Mode." t)
;; (setq py-python-command "python3")

最後の行はコメント化されていることに注意してください。

私は次のコマンドでemacsを起動します:

emacs -Q -l /t/min-py.el /t/min.py &

これで、emacsが私の代替dotemacs /t/min-py.elで開始され、/ t/min.pyが開きます。

Cc Ccを押してバッファをPythonに送信すると、「for」の部分が間違っていると表示され、python3の代わりにpython2が使用されていることを示します。Ccを押すと!pythonインタープリターを起動するには、python2.5が起動したと表示されます。

/t/min.pyの2行目を次のように変更することもできます。

# -*- py-python-command: "chunkybacon"; -*-

この実験をもう一度行うと、emacsはまだpython2を使用します。

/t/min-py.elの最後の行がコメントアウトされていない場合は、Cc CcおよびCc!どちらもpython3を使用します。

于 2009-09-22T15:42:25.517 に答える
2

jrockwayのコメントに関して:

(defun is-python3-p () "Check whether we're running python 2 or 3."
  (setq mystr (first (split-string (buffer-string) "\n" t)))
  (with-temp-buffer
    (insert mystr)
    (goto-char 0)
    (search-forward "python3" nil t)))
(defun run-python () "Call the python interpreter."
  (interactive)
  (if (is-python3-p)
      (setq py-python-command "/usr/bin/python3")
    (setq py-python-command "/usr/bin/python"))
  (py-execute-buffer))

これはpython3、「python3」がバッファの先頭行 (通常はシバン) にある場合に呼び出されます。何らかの理由で、(setq py-pyton-command ...)一度実行するとバージョンを変更できませんpy-execute-buffer。同じバッファでファイルを前後に変更しない限り、これは問題になりません。

于 2011-05-15T06:39:38.130 に答える
1

現在のpython-mode.elシバンは光栄です。

だけでPythonシェルをインタラクティブに開く

M-x pythonVERSION    
M-x python

インストールされたデフォルトを呼び出します。

http://launchpad.net/python-mode

于 2012-07-26T17:27:19.233 に答える