以前寫過一篇 lsp-mode 與 Python virtualenv 的整合,但 Ubuntu 23.04 開始不能直接 pip install --user
,這方法就不能用了。解決方式還算單純。
先把
pip list --user
有裝的東西紀錄下來,然後全砍掉。照文件建議,23.04 以上就直接 apt 裝。我還停在 22.04 只是想先換換看,所以用
pip install --user pipx
.pipx install pipenv
,pipx install python-lsp-server[all]
裝一些搭配 language server 的東西:
pipx inject python-lsp-server python-lsp-black python-lsp-isort
.之前專案都是跑
pipenv install --site-packages
, 現在不用了,全部重裝。1
2cd ~/.local/share/virtualenvs/
for F in */.project; do pushd $(cat $F); pipenv --rm; pipenv sync; popd; done改寫
pylsp.sh
, Emacs 裡面lsp-pylsp-server-command
就用這取代。1
2
3
4
5
6
7
8
9
10
11
set -e
if pipenv --venv &> /dev/null; then
VENV=$(pipenv --venv)
source "${VENV}/bin/activate"
exec pylsp "$@"
else
exec pylsp "$@"
fi
重點是先 activate venv 再跑 pylsp, 其實一開始用這方法就好了。