在像交互式python shell这样的shell中,你通常可以使用箭头键在当前行中移动或获取以前的命令(使用向上箭头)等.
但是在我进入另一台机器并从python
那里开始之后,我会得到以下会话:
>>> import os >>> ^[[A
最后一个角色来自向上箭头.或者,使用左箭头:
>>> impor^[[D
我怎样才能解决这个问题?
在常规bash中,箭头键工作正常.奇怪的行为只是在交互式python(或perl等)shell中.
我通过安装readline
包解决了这个问题:
pip install readline
在OS X上,我有不同的问题.
当我使用系统python shell时,键没有问题,但在virtualenv中存在问题.我尝试重新安装/升级virtualenv/readline并没有修复.
当我尝试import readline
在问题python shell中时,收到此错误消息:
ImportError: dlopen(/Users/raptor/.virtualenvs/bottle/lib/python2.7/lib-dynload/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib Referenced from: /Users/raptor/.virtualenvs/bottle/lib/python2.7/lib-dynload/readline.so Reason: image not found
因为有/usr/local/opt/readline/lib/libreadline.7.dylib
但不是libreadline.6.dylib
,所以我做了一个符号链接:
ln -s libreadline.7.dylib libreadline.6.dylib
问题已经解决了!
在OS X上,Xcode更新有时会中断readline
.解:
brew uninstall readline brew upgrade python3 brew install readline pip3 install readline
如果问题仍然存在,请尝试删除readline
使用pip
并使用easy_install
以下命令安装:
pip3 uninstall readline easy_install readline
看起来没有启用readline.检查PYTHONSTARTUP
变量是否已定义,对于我来说它指向/etc/pythonstart
并且该文件在进行交互之前由python进程执行,这将设置readline/history处理.
感谢@chown,这里的文档是:http://docs.python.org/2/tutorial/interactive.html
在OS X上,使用python 3.5和virtualenv
$ pip install gnureadline
在翻译中做:
import gnureadline
现在箭头键应该正常工作.
附加信息...
请注意,截至2015年10月1日 - readline已被弃用(来源https://github.com/ludwigschwardt/python-readline)
请改用gnureadline(参见:https://github.com/ludwigschwardt/python-gnureadline)
如果我使用python 3.5安装readline而不是gnureadline,我在尝试导入解释器后收到错误:
>>> import readline Traceback (most recent call last): File "", line 1, in ImportError: dlopen(/Users/pi/tmp/python-readline-test/.venv/lib/python3.5/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib Referenced from: /Users/pi/tmp/python-readline-test/.venv/lib/python3.5/readline.so Reason: image not found
安装readline-devel包.
用readline模块重新编译python
答对了!
我最近遇到了这个问题,在阅读了很多有关pip install readline
(不适用于mac osx)并且pip install gnureadline
不满意之后,现在这是我的设置,可以在任何python控制台中使用箭头键:
使用安装gnureadline pip install gnureadline
现在您可以执行操作,import gnureadline
并且箭头键应该可以正常工作。要使它们自动工作,请执行以下步骤:
创建(或附加到)文件~/.startup.py
:import gnureadline
追加到文件~/.bash_profile
:export PYTHONSTARTUP=~/.startup.py
在我之前的设置中没有起作用的一件事是:在上自动导入gnureadline pdb.set_trace()
。如果有人对这个问题有一个好的解决方案,我将不胜感激。
以下是在ubuntu 12.04 for python 3.3中为我工作的步骤.
1)打开teminal并写 sudo apt-get install libreadline-dev
2)从http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.xz下载python 3.3.2的源文件
3)解压缩并导航到shell中的Python-3.3.2 /目录
4)执行以下命令:
./configure make make test sudo make install
我在Ubuntu 16.04 LTS上遇到Python 3.6.x的shell历史(tab/arrows命令)问题.
Python 3.6.x是从源代码安装的.
为我解决的是使用此命令行安装user12345所述的模块"gnureadline":
sudo pip3.6 install gnureadline
:)
将Mac升级到High Sierra后受到影响,这成功解决了我:
brew unlink python xcode-select --install brew install python
在CentOS上,我通过
yum install readline-devel
然后重新编译python 3.4。
在OpenSUSE上,我通过
pip3 install readline
按照Valerio Crini的回答。
也许“ pip3 install readline”是一个通用解决方案。尚未在我的CentOS上尝试过。