从venv启动Python解释器时,.inputrc的readline配置不生效
嗨,我之前折腾虚拟环境的时候也碰到过一模一样的问题,当时差点把.inputrc改来改去试了半天,后来终于摸清楚几种可行的解决办法,咱们一个个说:
首先得先确认venv里的Python是不是真的有readline支持——激活你的虚拟环境,启动Python然后输入import readline,要是没报错,说明模块是有的,那咱们往下看:
办法一:让Python启动时自动加载.inputrc
有时候虚拟环境里的Python不会自动读取~/.inputrc,咱们可以手动让它加载。先在你的用户目录下创建一个.pythonrc文件,内容就两行:import readline readline.read_init_file()然后设置一个环境变量
PYTHONSTARTUP=~/.pythonrc,这样每次启动Python(不管是不是在venv里)都会自动执行这个文件,把.inputrc的配置读进去。要是想让这个变量在venv里自动生效,要么把它加到你的shell配置文件(比如~/.bashrc或者~/.zshrc)里,要么激活venv后,在venv的bin/activate脚本末尾加上export PYTHONSTARTUP=~/.pythonrc就行。办法二:检查是不是用了libedit而不是readline
有些系统比如macOS,默认的Python会用libedit代替GNU readline,而libedit认的是.editrc配置文件,不是.inputrc。你可以在venv的Python里输入print(readline.__file__)看看路径,要是里面有libedit的字样,那就在venv里装GNU readline包:pip install gnureadline装完再启动Python,应该就能读取
.inputrc里的Vi键位配置了。办法三:重新创建虚拟环境
要是你创建venv的时候用的Python版本和全局的不一样(比如全局是3.13,你却用python3.10创建了venv),那肯定会有差异。删掉旧的venv,用全局的3.13重新创建:python3.13 -m venv 你的venv名字这样新venv里的Python和全局的配置完全一致,应该就能正常用Vi键位了。
对了,你可以先试试办法一,这个最通用,不管什么系统都能用上~
备注:内容来源于stack exchange,提问作者Michael Scheper

