【问题标题】:Invalid Syntax when I use python-shell-send-buffer in Emacs Python-mode当我在 Emacs Python 模式中使用 python-shell-send-buffer 时语法无效
【发布时间】:2021-09-01 10:54:57
【问题描述】:

最近,我正在尝试将 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。 如何解决问题,它可以直接运行脚本?

【问题讨论】:

  • run-python 创建一个新的缓冲区,Python 在其中运行可以与之交谈的 REPL。目前尚不清楚这是否是您理解和期望的事情,或者您是否希望它应该做一些它没有做的事情。如果您尝试在该*Python* 缓冲区中运行python-shell-send-buffer,那么它将完全按照我在之前的评论中描述的那样运行。这看起来像是试点错误,但如果您不将其拼写出来,我们将无法纠正您的期望。

标签: python windows emacs


【解决方案1】:

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

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

为了快速演示这是如何工作的,

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

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

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

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

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

如果您的 Python 代码的缓冲区正在运行 python-mode,则有一个快捷键 C-c C-c 可以将缓冲区提交给 REPL,因此您无需键入冗长而复杂的 M-x 命令序列。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 2019-01-25
    • 2017-07-11
    • 2021-04-27
    • 2012-10-04
    相关资源
    最近更新 更多