如何配置virtualenv中Python控制台的补全与历史记录功能?
解决Virtualenv虚拟环境中Python无命令历史和补全的问题
嘿,这个问题我之前折腾过好一阵,大概率是手动编译的Python缺少readline依赖,或者虚拟环境没正确加载命令历史的配置导致的。咱们一步步来解决:
1. 补全Python编译所需的readline依赖
Debian/LMDE系统里,Python的readline模块依赖系统的libreadline-dev包。你手动安装Python3.6的时候如果没装这个包,编译出来的Python就没法支持命令历史和补全。先装这个依赖:
sudo apt-get update && sudo apt-get install libreadline-dev
装完之后,重新编译安装Python3.6(因为之前编译的时候没这个依赖,必须重来):
假设你是从源码编译的,进入你下载的Python3.6源码目录,执行:
./configure --enable-optimizations # 保留你之前用的其他配置参数 make && sudo make install
2. 配置全局Python启动脚本,强制启用历史和补全
有时候即使Python本身支持readline,虚拟环境里也可能没自动加载相关配置。咱们在用户目录创建一个.pythonrc文件,内容如下:
import readline import rlcompleter import atexit import os # 启用Tab补全 readline.parse_and_bind('tab: complete') # 设置历史记录文件 hist_file = os.path.join(os.environ['HOME'], '.python_history') try: # 读取已有的历史记录 readline.read_history_file(hist_file) # 限制历史记录最多1000行,可按需调整 readline.set_history_length(1000) except FileNotFoundError: # 第一次运行没有历史文件,忽略报错 pass # 退出Python时自动保存历史记录 atexit.register(readline.write_history_file, hist_file)
然后打开你的~/.bashrc(或者~/.profile),添加一行让Python启动时自动加载这个配置:
export PYTHONSTARTUP="$HOME/.pythonrc"
保存后,重启终端或者执行source ~/.bashrc让配置生效。
3. 更新Virtualenv版本
老版本的virtualenv可能和手动安装的Python版本兼容性不好,更新到最新版试试:
pip install --upgrade virtualenv
4. 重新创建虚拟环境测试
现在用Python3.6重新创建虚拟环境:
virtualenv -p /usr/bin/python3.6 my_test_env source my_test_env/bin/activate
进入Python交互模式或者pdb,试试按上下键看历史记录,按Tab键补全命令,应该就正常了。
至于Python2.7的虚拟环境,用同样的方法也能解决——因为这个.pythonrc脚本对Python2.7也适用,只要系统的Python2.7本身有readline支持(你说外面正常,那肯定是有的)。
内容的提问来源于stack exchange,提问作者freezed
相关产品推荐
相关产品推荐

