参考 Python virtualenv 和 @seraphlive
大佬的回复,让 ChatGPT 糊了一个:
- 使用 conda.el 在 Emacs 中调用 conda 环境。
- 可以使用命令
M-x package-install conda
安装这个包
- 打开
.py
文件后执行命令 M-x conda-env-activate
切换到指定环境
以下是配置
(add-to-list 'load-path "~/.emacs.d/lsp-bridge/")
(require 'lsp-bridge)
(global-lsp-bridge-mode)
;; 开启 org-mode 补全
(setq lsp-bridge-enable-org-babe t)
;;; 虚拟环境支持 @ https://github.com/manateelazycat/lsp-bridge/wiki/Python-virtualenv
(setq lsp-bridge-python-command "/usr/bin/python") ;; specify environment to run epc
(require 'conda) ;; M-x package-install conda
(conda-env-initialize-interactive-shells) ;; support interactive shell
(conda-env-initialize-eshell) ;; support eshell
(conda-env-autoactivate-mode t) ;; auto-activation
(custom-set-variables '(conda-anaconda-home "~/miniconda/")) ;; specify installation directory
(add-hook 'conda-post-activate-hook ;; restart lsp-bridge
(lambda ()
(lsp-bridge-restart-process)))
但是 eaf 后院起火了
Process *eaf* exited abnormally with code 1
Traceback (most recent call last):
File "/home/mawen/.emacs.d/site-lisp/emacs-application-framework/eaf.py", line 25, in <module>
from PyQt6 import QtWebEngineWidgets as NeverUsed # noqa
ModuleNotFoundError: No module named 'PyQt6'
- 重启 Emacs 不 work
- 重启机器后直接开
eaf-open-rss-reader
不报错。若执行 conda-env-activate
命令,则上述问题可复现
- 经过排查,需要在执行
conda-env-activate
命令后使用 conda-env-deactivate
命令,否则会出现上述问题
- 这一套流程用起来很奇怪… 环境时常不能正确加载
目前使用 pyvenv 插件可以与 lsp-bridge 配合,能够切换到虚拟环境并使用 lsp-bridge补全了。
但是会导致 eaf 不能用,报错如下
Traceback (most recent call last):
File "/home/ententent/.emacs.d/site-lisp/emacs-application-framework/eaf.py", line 25, in <module>
from PyQt6 import QtWebEngineWidgets as NeverUsed # noqa
ModuleNotFoundError: No module named 'PyQt6'
Process *eaf* exited abnormally with code 1
这个问题触发时,有时重启 Emacs 也不能解决。
配置如下:
(use-package pyvenv
:ensure t
:config
(setenv "WORKON_HOME" (expand-file-name "~/miniconda3/envs"))
(pyvenv-mode t)
(add-hook 'python-mode-hook
(lambda () (pyvenv-workon "dev")))
)
(defun local/lsp-bridge-get-single-lang-server-by-project (project-path filepath)
(let* ((json-object-type 'plist)
(custom-dir (expand-file-name ".cache/lsp-bridge/pyright" user-emacs-directory))
(custom-config (expand-file-name "pyright.json" custom-dir))
(default-config (json-read-file (expand-file-name "lsp-bridge/langserver/pyright.json" user-emacs-directory)))
(settings (plist-get default-config :settings))
)
(plist-put settings :pythonPath (executable-find "python"))
(make-directory (file-name-directory custom-config) t)
(with-temp-file custom-config (insert (json-encode default-config)))
custom-config))
(add-hook 'python-mode-hook
(lambda ()
(setq-local lsp-bridge-get-single-lang-server-by-project
'local/lsp-bridge-get-single-lang-server-by-project)))
(add-hook 'pyvenv-post-activate-hooks
(lambda ()
(lsp-bridge-restart-process)))
求大佬指点
2 个赞
pyvenv 切完虚拟环境后,eaf-python-command 默认找到的 python 是虚拟环境的那个,肯定是没有 eaf 依赖的。配置一下 eaf-python-command,指向的是你装的 eaf 依赖的那个 python 环境。或者干脆开个新的虚拟环境专门给 eaf 用,装完 eaf 依赖把 eaf-python-command 配置成新建的虚拟环境 python 可执行文件就好了
1 个赞
有心贡献,能力不够,elisp水平不行,我用advice-add 复写了acm-markdown-render-content这个函数,换成了与acm-terminal版本对应(lsp-bridge 81cc2fc)的函数修复了这个错误
我经常要同时工作在几个项目拷贝中,每一个拷贝对应一个新功能。感觉lsp-bridge是不是不支持这种模式?
有一个项目foo, 有多个本地拷贝,foo_1, foo_2, foo_3,同时使用. 感觉经常没办法跳转到函数定义,需要重启lsp-bridge (lsp-bridge-restart-workspace). 不知道是不是lsp-bridge不支持这种用法。
你这个 foo_1 foo_2 foo_3 之间有关联吗? 还是这三个是独立的三个项目? 还有这些项目都是什么语言?
lsp-bridge 能用dap-mode吗,一直提示找不到lsp-mode
1 个赞
用过一阵 lsp-bridge ,最后是要用 dap-mode 长期在用 lsp-mode
@manateelazycat 有没兴趣研究一下 dap-mode ?写单元测试配合编辑器断点调试提升开发体验相当哇塞。
(global-lsp-bridge-mode)
这个打开新 buffer 时并不生效,需要手动用 lsp-bridge-mode
才能开启 mode,不知道如何排查问题。望大佬能指点一二。
解决了,是我自己的 prog-mode-hook 中的函数出了问题。插件很好用,曾经的 vscoder 表示除了 ipynb,vscode 已经可以被 emacs 替代了。
1 个赞
考虑用 git worktree 为分支创建单独的目录?
如果你有一个 git 项目有多个子目录, 你需要定制 lsp-bridge-get-single-lang-server-by-project , 让 lsp-bridge 子目录来返回 project_name。
这样 lsp-bridge 就忽略 git 而用 lsp-bridge-get-single-lang-server-by-project 规则来查找项目的 root path.
今年时间够呛, 主要我平常都用目测来写代码, 很少用调试器, 除非是别人的项目。
动力严重不足, 但是 dap 的协议类似 lsp, 用 lsp-bridge 应该是完全可以做到的, 而且实现后性能要强很多。
ipynb 是啥?
lsp-bridge 主要就是对标性能, VSCode有多快, lsp-bridge就有多快。
就是 jupyter notebook,现在也有 emacs 插件,不过界面和 vim 模式的支持暂时没有 vscode 里面的好用。
jupyter 可以在 Web 上运行吗? 可以的话, 可以考虑结合 EAF 来用。
1 个赞