在用pyenv开启的virtualenv虚拟环境中,python3的shell交互界面方向键不能使用,出现^[[C^[[D这样的符号,原因是在虚拟环境中安装的Python3没有安装readline,需要自己安装,然后重新编译Python。至于为什么按方向键会出现^[[C^[[D,知乎有解释的很清楚的,链接:https://www.zhihu.com/question/21518507

我在安装readline时出现了问题,然后安装完使用方向键退出交互界面时又出现了问题。。。心塞,不过一步步总算解决了,过程如下:

1
sudo easy_install readline

用easy_install安装readline,在这一步出错,提示信息:error: command 'gcc' failed with exit status 1
解决方法是需要安装ncurses开发包:

1
sudo apt-get install libncurses-dev

方法来自:https://serverfault.com/questions/440085/ipython-easy-install-pip-error

然后安装完成readline,还需要重新编译Python,或者重新安装一遍。因为我是用pyenv安装的Python3.6.0的版本,就直接再用pyenv安装一遍了:

1
pyenv install -v 3.6.0

如果是要重新编译Python,那么:

1
2
3
4
# 进入安装目录
cd Python-3.6.0
./configure
make && sudo make install

一定要注意:

如果使用pyenv安装了多套开发环境,要清楚的知道自己重新编译或者重装的是哪一套的环境下的Python,不要搞混了

现在可以在交互模式下使用方向键了,,但是在退出交互模式时exit(),又报错了:Error in `python’: free(): invalid pointer: 0x00007f550490f570

这是因为缺少libtcmalloc-minimal4库,解决方法:

1
2
3
4
5
6
7
sudo apt-get install libtcmalloc-minimal4
# 打开~/.bashrc文件
sudo gedit ~/.bashrc
# 在文件末尾添加如下代码:
export LD_PRELOAD="/usr/lib/libtcmalloc_minimal.so.4"
# 重新载入环境变量
sudo source ~/.bashrc

方法来自:https://blog.csdn.net/songyu0120/article/details/77718724

然后再进入交互模式,用左右方向键试下没问题,再退出,还是又报错了:src/tcmalloc.cc:278] Attempt to free invalid pointer

仔细看报错信息,有一行是:WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?

安装提示没有被编译的bz2扩展:

1
sudo apt-get install libbz2-dev

再重新编译一次Python

终于没有再报错了,,完美~