Нет истории строк / автозаполнение доступно в Python REPL - PullRequest
2 голосов
/ 20 апреля 2019

Я скачал и скомпилировал Python 3.7 из исходного кода на компьютере Debian, однако функция 'readline' (просмотр истории строк, вкладка для автозаполнения) отсутствует.У меня есть пакет python3.5, который был установлен с помощью apt, и функционал там работает.У меня установлены пакеты libreadline7 и readline-common (они были установлены до того, как я скомпилировал Python 3.7).Я предполагаю, что есть файл конфигурации, который мне нужно отредактировать / создать где-нибудь, или, может быть, флаг, который мне нужно использовать во время компиляции?Все ответы, которые я смог найти, привели к «установке пакета readline», который уже имел место для меня.

Вывод ./configure | grep "readline" во время компиляции Python:

checking how to link readline libs... none
checking for rl_pre_input_hook in -lreadline... no
checking for rl_completion_display_matches_hook in -lreadline... no
checking for rl_resize_terminal in -lreadline... no
checking for rl_completion_matches in -lreadline... no
checking for append_history in -lreadline... no

1 Ответ

2 голосов
/ 20 апреля 2019

Возможно, вам не хватает libreadline-dev, который содержит фактические заголовочные файлы, необходимые для компиляции с библиотекой readline.

Если вы sudo apt install libreadline-dev и затем перекомпилируете свой питон, вы получите поддержку readline.

Отвечая на ваш комментарий о заголовочных файлах: Заголовочные файлы являются компонентом библиотек C и C ++. Они объявляют, какие функции доступны в библиотеке. Стандартная реализация Python написана на C и поэтому использует эти заголовочные файлы для объявления о существовании этих функций. По умолчанию configure использует наличие этих заголовочных файлов с соответствующими именами функций, чтобы определить наличие readline и других функциональных возможностей библиотеки. Таким образом, скрипт configure выводит no о том, что вам не хватает этой критически важной функции readline. Это признак того, что readline «отсутствует» в вашей системе для целей компиляции. Причина, по которой Debian разделяет заголовочные файлы на отдельный пакет, заключается в том, что не каждый компилирует код с нуля в Debian, поэтому пакеты -dev содержат зависимости dev для библиотеки. Вам необходимо установить -dev пакеты, только если вы разрабатываете против этой библиотеки. Этот вопрос также может иметь отношение к вашему следованию по вопросу.

...