Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get readline working with python in alpine

When I apk add python3 in a Docker container running the alpine distribution, key combinations like Ctrl <left arrow>, rather than moving the cursor by whole words, print things like this (here, I typed 'spam eggs', then held down control and hit the left arrow key):

Python 3.5.1 (default, Dec  9 2015, 14:41:32) 
[GCC 5.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> spam ham;5D

Merely apk adding readline or pip3 installing it does not by itself solve the problem.

How can I get readline working with python in this environment?

like image 527
Croad Langshan Avatar asked Oct 27 '25 16:10

Croad Langshan


1 Answers

Looks like the key to this is mostly a case of getting readline working, but you might also have to handle your TERM correctly too.

I tried a Dockerfile like this:

FROM alpine
RUN apk update && \
  apk add python3 python3-dev build-base ncurses-dev bash && \
  python3 -m ensurepip && \
  pip3 install readline

COPY ./inputrc /etc/inputrc

With the inputrc from https://github.com/frol/docker-alpine-env/blob/master/etc/inputrc, copied below:

# do not bell on tab-completion
#set bell-style none

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on

$if mode=emacs

# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[7~": beginning-of-line
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# for rxvt
"\e[8~": end-of-line

# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
$endif

Here's a few links that I gathered this info from:

  • Seeing escape characters when pressing the arrow keys in python shell
  • https://docs.python.org/2/tutorial/interactive.html
  • Bash CTRL to move cursor between words/strings

NB - I know it seems daft to be installing bash, but the pip3 install readline fails without it. Also not ideal to have to be installing gcc etc, though you could cleanup after this if you need to by apk del-ing a few things.

With all this in place, it worked on my mac but not immediately on putty, though I suspect that just the TERM setup, YMMV.

like image 198
boyvinall Avatar answered Oct 29 '25 05:10

boyvinall



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!