27
votes

I'm using zsh, iTerm2 (3.0.9), and pyenv (1.0.2) with pyenv global set to 3.5.2.

In the Python shell, the up and down arrow keys used to work, to access the previous commands in the history. But now after upgrading to OSX 10.12, instead it shows control characters. For example up arrow displays:

^[[A

I've tried installing readline as suggested in Seeing escape characters when pressing the arrow keys in python shell but that didn't help. I don't have the PYTHONSTARTUP variable but didn't used to before, and not sure how that interacts with pyenv.

7
Same happened to me, but I'm using the built-in bash, terminal, no environments, didn't upgrade the OS and still happened. - Petruza

7 Answers

12
votes

I solved it by installing python from homebrew:

brew unlink python
brew install python
12
votes

I had the exact same issue and this command worked for me easy_install -a readline.

Full credit here: ipython complaining about readline

3
votes

This worked for me:

CFLAGS="-I$(brew --prefix readline)/include -I$(brew --prefix openssl)/include -I$(xcrun --show-sdk-path)/usr/include" \
LDFLAGS="-L$(brew --prefix readline)/lib -L$(brew --prefix openssl)/lib" \
PYTHON_CONFIGURE_OPTS=--enable-unicode=ucs2 \
pyenv install -v 2.7.11

Source: https://medium.com/@pimterry/setting-up-pyenv-on-os-x-with-homebrew-56c7541fd331#.urbdkrc9l

2
votes

This can happen with upgrading XCode or XCode tools (which often occurs with an OS upgrade) when using brew installed python.

In this case, you just need to reinstall:

brew reinstall python

If you need python 2, remember brew defaults to python3 now, so you need:

brew reinstall python2
0
votes

I'm seeing the same thing and the only "fix" I was able to come up with was to not run the pyenv init - command in my .zshrc file. That however will inhibit the functioning of virtual environments.. and so it's not a fix but a workaround to get the python shell history to work again.

I'm continuing to look and see if there is a permanent fix as I'm not nearly as productive without it.

0
votes

What solved it for me was running the steps mentioned by jsphpl (unlink and install) and then additionally using brew to link python again and allowing the overwrite of conflicting files.

-1
votes

Need to configure python's shortcuts.

In shell, run idle3, then update the key shortucts:

How to repeat last command in python interpreter shell?