在 Emacs Python-mode 中使用 python-shell-send-buffer 时语法无效

Invalid Syntax when I use python-shell-send-buffer in Emacs Python-mode

最近,我正在尝试将 emacs 配置为我的 python IDE,并在我的计算机中使用 anaconda。 我在 init.el 中的 emacs 中使用了 conda 包和 python-mode,如下所示:

(use-package conda
  :ensure t
  :init
(setq conda-anaconda-home (expand-file-name "D:/Anaconda"))
(setq conda-env-home-directory (expand-file-name "D:/Anaconda/envs")))
(use-package python-mode
  :ensure t
  :hook (python-mode . lsp-deferred)
  :custom
  (dap-python-debugger 'debugpy)
  :config
  (require 'dap-python))

在我的 anaconda 环境中,我有五个环境:

# conda environments:
#
base                  *  D:\Anaconda
PyCharm                  D:\Anaconda\envs\PyCharm
Pyflow                   D:\Anaconda\envs\Pyflow
gluon                    D:\Anaconda\envs\gluon
tensorflow               D:\Anaconda\envs\tensorflow

我可以在emacs中打开一个shell并激活基础环境和运行python。 但是在 emacs 中,当我尝试 运行 一个 py 文件时。当我使用 M-x run-python 而它没有 运行 我的 python 脚本时。之后,我尝试使用 python-shell-send-buffer 到 运行 脚本,但它抛出了以下错误:

>>> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:/Users/Travis/AppData/Local/Temp/pyQTizRq", line 1
    Python 3.8.5 (default, Sep  3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
           ^
SyntaxError: invalid syntax

并且当我打开这个目录时'''c:/Users/Travis/AppData/Local/Temp/'''这个文件不存在。 我的系统是 windows 10 和 emacs 27.2。 我该如何解决这个问题,它可以直接 运行 脚本?

使用 python-shell-send-buffer 的正确方法是从 Python 代码的缓冲区中 运行 它;然后,Emacs 会将该缓冲区的内容发送到您以 run-python.

开始的 Python REPL

不要在 run-python 缓冲区 (*Python*) 本身中 运行 此命令;将该缓冲区的内容作为代码提交给 Python 没有任何意义。

为了快速演示其工作原理,

  • 创建缓冲区 demo.py 并在其中键入一些 Python 代码。

    print("Hello Emacs")
    
  • 将框架分成两个窗格(在 Emacs 术语中奇怪地称为“windows”)C-x 2

  • 在其中一个窗格中,执行M-x run-python

  • 切换到另一个窗格(C-x o),然后执行M-x python-shell-send-buffer

  • 观察命令如何在 *Python* 缓冲区中的 Python REPL 提示符下输入,结果在那里可见。

如果你的Python代码的buffer是运行ning python-mode,有一个快捷键C-c C-c提交buffer到REPL,所以你不用不需要键入又长又复杂的 M-x 命令序列。

评估功能通过在后台创建一个临时文件来工作,但当您尝试检查它时,它又会消失。