给python shell安装readline以及后续几个坑
在用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 | # 进入安装目录 |
一定要注意:
如果使用pyenv安装了多套开发环境,要清楚的知道自己重新编译或者重装的是哪一套的环境下的Python,不要搞混了
现在可以在交互模式下使用方向键了,,但是在退出交互模式时exit()
,又报错了:Error in `python’: free(): invalid pointer: 0x00007f550490f570
这是因为缺少libtcmalloc-minimal4库,解决方法:
1 | sudo apt-get install libtcmalloc-minimal4 |
方法来自: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
终于没有再报错了,,完美~