3

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?

Croad Langshan
  • 2,646
  • 3
  • 24
  • 37

1 Answers1

6

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:

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.

Community
  • 1
  • 1
boyvinall
  • 1,807
  • 11
  • 8
  • What do you mean by "you might also have to handle your TERM correctly", @boyvinall? – pdoherty926 Jun 29 '23 at 20:32
  • 1
    Wow, this was a long time ago. But I think I was talking about the TERM environment variable. See some info here: https://bash.cyberciti.biz/guide/$TERM_variable .. but something like `export TERM=linux` or similar – boyvinall Jul 11 '23 at 11:45