voyager -- A blazingly fast DAP client for Emacs

猫大怎么看待dape和dap-mode的区别?哪个更好

从目前看, 肯定是 dap-mode 功能更多, 长远看我觉得 dape 发展会更好, 因为大家独立选择比较好。

dap-mode 依赖 lsp-mode 的那几个函数完全是没有必要的, 做为 lsp-bridge 的作者我当然希望支持 dape, 这样大家会选择我的 lsp-bridge, 而不是因为 dap-mode 去忍受 lsp-mode 的慢速。

我本来做 voyager 的目标就是为了 lsp-bridge 提供一个独立的调试客户端, 既然 dape 和我目标类似, 是独立于 lsp-mode 提供一个调试客户端, 那就没必要自己开发 voyager 了。

我最近公司的事比较忙, 我未来可能会发力的地方在于 “多进程浏览器, 全键盘操作, 适配油猴插件框架”, 这个多进程的模型搞出来, 可以真正让Emacs键盘浏览器和Chrome一样块。 这个搞出来, 再配合我现在的 lsp-bridge, eaf, blink-search等插件, 我的Emacs生活就完美了。

8 个赞

pyenv和dape配合环境变量有问题,导致python找到的是系统自带的。

用pyvenv,在打开python-mode 的时候激活 对应的虚拟环境,之后调用dape就是虚拟环境里的python了

我是这样去解决的。

  (dolist (config-name '(debugpy debugpy-module))
    (let ((debugpy-config (alist-get config-name dape-configs)))
      (plist-put debugpy-config 'command
                 (expand-file-name "shims/python" (or (getenv "PYENV_ROOT") "~/.pyenv")))
      ))

pyenv配置

(use-package pyenv-mode
  :defer t
  :after python
  :config
  (defvar +pyenv--version nil)

  (defun +python-pyenv-read-version-from-file ()
    "Read pyenv version from .python-version file."
    (when-let (root-path (projectile-locate-dominating-file default-directory ".python-version"))
      (let* ((file-path (expand-file-name ".python-version" root-path))
             (version
              (with-temp-buffer
                (insert-file-contents-literally file-path)
                (string-trim (buffer-string)))))
        (if (member version (pyenv-mode-versions))
            version  ;; return.
          (message "pyenv: version `%s' is not installed (set by `%s')."
                   version file-path)))))
  (defun +python-pyenv-mode-set-auto-h ()
    "Set pyenv-mode version from buffer-local variable."
    (when (eq major-mode 'python-mode)
      (when (not (local-variable-p '+pyenv--version))
        (make-local-variable '+pyenv--version)
        (setq +pyenv--version (+python-pyenv-read-version-from-file)))
      (if +pyenv--version
          (pyenv-mode-set +pyenv--version)
        (pyenv-mode-unset))))

  (when (executable-find "pyenv")
    (pyenv-mode +1)
    (with-eval-after-load 'exec-path-from-shell
      (exec-path-from-shell-copy-env "PYENV_ROOT"))
    (add-to-list 'exec-path (expand-file-name "shims" (or (getenv "PYENV_ROOT") "~/.pyenv"))))
  (add-hook 'python-mode-local-vars-hook #'+python-pyenv-mode-set-auto-h))

没用过pyenv,pyvenv可以试试

使用poetry 和 pyvenv的项目配置

cd your-project && poetry init # if project is existed else poetry new your-project
python -m venv .venv
poetry config virtualenvs.in-project true

使用poetry和pyenv的配置

pyenv install 3.12.0
cd your-project && poetry init # if project is existed else poetry new your-project
pyenv virtualenv 3.12.0 your-venv
pyenv activate your-venv # there must activete your venv
poetry env use $(pyenv which python)

这样就可以和dape配合使用了,没必要用pyenv-mode这个扩展了。