在 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
命令序列。
评估功能通过在后台创建一个临时文件来工作,但当您尝试检查它时,它又会消失。
最近,我正在尝试将 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
.
不要在 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
命令序列。
评估功能通过在后台创建一个临时文件来工作,但当您尝试检查它时,它又会消失。