0%

缩短poetry虚拟环境的命令行提示符前缀

最近在尝试使用poetry来进行项目的包管理,发现poetry创建的虚拟环境中,命令行提示符特别的长。

比如我创建了一个名为”test-poetry”的项目,那么使用 poetry shell 命令激活虚拟环境后,却发现整个命令行提示符如此之长:

(test-poetry-FvrREBVp-py3.6) knktc@knktc-rmbp test_poetry %

因为poetry自动为虚拟环境编了个码,同时还加上了python版本号,都放到命令行提示符里作为前缀就很长了。对于小屏幕的用户来说(比如我这13寸笔记本的用户)就很不友好了。

还是想想怎么缩短下这个括号中的环境名称吧。

因为这些虚拟环境都是用bin/activate命令来启动的,所以可以尝试定位下activate命令到底在哪里。

可以在项目目录下(确认当前目录下有pyproject.toml文件即可),执行以下的命令:

1
poetry env info -p

此时会打印出来环境的path信息,比如:

1
2
(test-poetry-FvrREBVp-py3.6) knktc@knktc-rmbp test_poetry % poetry env info -p
/Users/knktc/Library/Caches/pypoetry/virtualenvs/test-poetry-FvrREBVp-py3.6

那么我们就可以直接到这个目录下去找bin/activate文件来修改了:

1
vim /Users/knktc/Library/Caches/pypoetry/virtualenvs/test-poetry-FvrREBVp-py3.6/bin/activate

在代码的第68行左右可以看到设置PS1的相关代码,这里其实是用了环境的目录名来做为了命令行提示符的前缀:

1
2
3
4
5
6
7
8
9
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
_OLD_VIRTUAL_PS1="${PS1-}"
if [ "x" != x ] ; then
PS1="() ${PS1-}"
else
PS1="(`basename \"$VIRTUAL_ENV\"`) ${PS1-}" # <---就是这行
fi
export PS1
fi

那么我们可以修改下这句,直接改成项目的名称就好了:

1
2
3
4
5
6
7
8
9
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
_OLD_VIRTUAL_PS1="${PS1-}"
if [ "x" != x ] ; then
PS1="() ${PS1-}"
else
PS1="(test-poetry) ${PS1-}" # <---- 直接写死为项目名称了
fi
export PS1
fi

然后保存退出,重新激活下环境:

1
2
3
4
5
knktc@knktc-rmbp test_poetry % poetry shell
Spawning shell within /Users/knktc/Library/Caches/pypoetry/virtualenvs/test-poetry-FvrREBVp-py3.6
Restored session: 2022年 2月 9日 星期三 23时12分53秒 CST
knktc@knktc-rmbp test_poetry % . /Users/knktc/Library/Caches/pypoetry/virtualenvs/test-poetry-FvrREBVp-py3.6/bin/activate
(test-poetry) knktc@knktc-rmbp test_poetry %

这下就好了~

如果我的文字帮到了您,那么可不可以请我喝罐可乐?