pycharm Emacs中的Python类型提示

iih3973s  于 2022-11-08  发布在  PyCharm
关注(0)|答案(3)|浏览(250)

我来自PyCharm,想学习用Emacs(Spacemacs)设置Python。
PyCharm有一个名为Type Hinting的特性,它基本上允许指定类型,然后基于指定的类型获得提示。Python 3.5+有PEP 484 -- Type Hints,它允许指定类型而不需要注解。在PEP 484之前,指定类型是使用注解完成的。
Emacs中是否有这样的类型提示?

nnt7mjpx

nnt7mjpx2#

我在2020年遇到了这个问题,发现有一些更好的工具可以解决这个问题。单独使用Jedi可能无法得到你想要的东西。相反,你可能会想使用elpyflycheckflycheck-pycheckerspyflakesmypy的组合。
flycheck是Emacs的一个通用语法检查包。flycheck-pycheckers与flycheck一起使用,允许您使用多个Python语法检查器,因为pyflakes不处理类型提示,mypy不处理通用语法-您需要同时使用这两个语法检查器。
所以你的步骤是
1.使用pip安装pyflakes和mypy。
1.在Emacs配置中安装use-package(我将把这方面的说明留给您)。
1.将以下行添加到您的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语法和类型提示。

xxslljrj

xxslljrj3#

elpy在过去是很棒的,我使用了一个非常类似于@jidicula的设置。但是,elpy不再适用于当前版本的jedi,并且这个问题已经一年多没有得到解决了。结果elpy不再被维护,请参见https://github.com/jorgenschaefer/elpy
我试过eglot,它能完成这项工作。然而,eglot author insists on using obsolete flymake instead of its modern replacement flycheckflycheck可以同时使用mypy3pyflakes,而flymake不能,所以必须在同一个缓冲区中同时使用flycheckflymake,这会产生不必要的摩擦和新的困难,我不想浪费时间。
lsp-mode看起来是目前最好的选择。它更受欢迎,贡献者多5倍,更灵活,更少固执己见,因为它同时适用于flycheckflymake
我安装了lsp-mode Python依赖项:

conda install python-lsp-server pylsp-mypy

pip也应该提供这些功能。

相关问题