Emacs 中的 Python 类型提示

问题描述 投票:0回答:3

我来自 PyCharm,想了解 Emacs (Spacemacs) 的 Python 设置。

PyCharm 有一个名为 Type Hinting 的功能,它基本上允许指定类型,然后根据指定的类型获取提示。 Python 3.5+ 有 PEP 484 -- Type Hints,它允许在没有注释的情况下指定类型。在 PEP 484 之前,指定类型是使用注释完成的。

Emacs 有这样的类型提示吗?

python emacs pycharm
3个回答
3
投票

Jedi 0.10.0https://github.com/davidhalter/jedi/issues/858

之后添加了部分PEP 484支持

3
投票

我在 2020 年遇到了这个问题,发现有一些更好的工具可以解决这个问题。仅凭绝地武士可能无法让你得到你想要的东西。相反,您可能需要使用

elpy
flycheck
flycheck-pycheckers
pyflakes
mypy
的组合。

Elpy 是 Emacs Python IDE 包。 Flycheck 是 Emacs 的通用语法检查包。 Flycheck-pycheckers 与 Flycheck 配合使用,允许您使用多个 Python 语法检查器,因为 pyflakes 不处理类型提示,而 mypy 不处理一般语法 – 您需要同时使用两者。

所以你的步骤是

  1. 使用 pip 安装 pyflakes 和 mypy。

  2. 在您的 Emacs 配置中安装

    use-package
    (我会将相关说明留给您)。

  3. 将以下行添加到 init.el 或 .emacs 中:

;; flycheck
(use-package flycheck
  :ensure t
  :config
  (global-flycheck-mode t)
  ;; note that these bindings are optional
  (global-set-key (kbd "C-c n") 'flycheck-next-error)
  ;; this might override a default binding for running a python process,
  ;; see comments below this answer
  (global-set-key (kbd "C-c p") 'flycheck-prev-error)
  )
;; flycheck-pycheckers
;; Allows multiple syntax checkers to run in parallel on Python code
;; Ideal use-case: pyflakes for syntax combined with mypy for typing
(use-package flycheck-pycheckers
  :after flycheck
  :ensure t
  :init
  (with-eval-after-load 'flycheck
    (add-hook 'flycheck-mode-hook #'flycheck-pycheckers-setup)
    )
  (setq flycheck-pycheckers-checkers
    '(
      mypy3
      pyflakes
      )
    )
  )
;; elpy
(use-package elpy
  :after poetry
  :ensure t
  :config
  (elpy-enable)
  (add-hook 'elpy-mode-hook 'poetry-tracking-mode) ;; optional if you're using Poetry
  (setq elpy-rpc-virtualenv-path 'current)
  (setq elpy-syntax-check-command "~/.pyenv/shims/pyflakes") ;; or replace with the path to your pyflakes binary
  ;; allows Elpy to see virtualenv
  (add-hook 'elpy-mode-hook
        ;; pyvenv-mode
        '(lambda ()
           (pyvenv-mode +1)
           )
        )
  ;; use flycheck instead of flymake
  (when (load "flycheck" t t)
  (setq elpy-modules (delq 'elpy-module-flymake elpy-modules))
  (add-hook 'elpy-mode-hook 'flycheck-mode))
  )
;; poetry
(use-package poetry
  :ensure t)

此解决方案将帮助您在 Emacs 中设置 Python 语法和类型提示。


3
投票

elpy
过去很棒,我使用的设置与@jidicula非常相似。但是,
elpy
不再适用于当前版本的
jedi
,并且这个问题已经一年多没有得到解决。事实证明
elpy
不再维护,请参阅 https://github.com/jorgenschaefer/elpy

我尝试了

eglot
,它成功了。然而,
eglot
作者坚持使用过时的
flymake
而不是现代的替代品
flycheck
flycheck
可以同时使用
mypy3
pyflakes
,而
flymake
不能,所以必须在同一个缓冲区中同时使用
flycheck
flymake
,这会产生不必要的摩擦和新的困难,我宁愿不要浪费我的时间。

lsp-mode
似乎是目前最好的选择。它更受欢迎,贡献者数量增加了 5 倍,并且更加灵活且不那么固执己见,因为它可以与
flycheck
flymake
一起使用。

我安装

lsp-mode
Python 依赖项:

conda install python-lsp-server pylsp-mypy

这些也应该可以通过

pip
获得。

© www.soinside.com 2019 - 2024. All rights reserved.