【问题标题】:No line history / autocomplete available in python REPLpython REPL中没有行历史记录/自动完成功能
【发布时间】:2019-09-10 02:21:56
【问题描述】:

我在 Debian 机器上从源代码下载并编译了 Python 3.7,但是缺少“readline”功能(查看行历史记录、选项卡以自动完成)。我有使用apt 安装的python3.5 包,该功能在那里工作。我安装了libreadline7readline-common 软件包(这些是在我编译Python 3.7 之前安装的)。我猜我需要在某处编辑/创建一个配置文件,或者我需要在编译期间使用一个标志?我能找到的所有答案都导致“安装readline 包”,这对我来说已经是这样了。

Python编译过程中./configure | grep "readline"的输出:

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

【问题讨论】:

  • 我不记得上次编译 Python 时必须配置任何东西 - 一旦我安装了 readline,构建过程会自动将其拾取并将其包含在 Python 构建中。
  • 尝试重新编译 Python 并 grepping 构建输出以搜索字符串 readline
  • 另外,如果你这样做import readline会发生什么?
  • @user2357112 问题已更新,很好的建议。似乎configure 脚本找不到 readline 包。 python3.7: import readlineModuleNotFoundError

标签: python python-3.x debian libreadline


【解决方案1】:

您可能缺少 libreadline-dev,其中包含针对 readline 库进行编译所需的实际头文件。

如果您 sudo apt install libreadline-dev 然后重新编译您的 python,您将获得 readline 支持。

回答您关于什么是头文件的评论:头文件是 C 和 C++ 库的一个组件。它们声明了库中可用的函数。标准 Python 实现是用 C 编写的,因此使用这些头文件来声明这些函数的存在。默认情况下,configure 使用这些具有匹配函数名称的头文件的存在来确定 readline 和其他库功能的存在。因此configure 脚​​本输出no 表示您缺少readline 的这一关键功能。这表明 readline 在您的系统上“丢失”以进行编译。 Debian 将头文件拆分成一个单独的包的原因是不是每个人都在 Debian 上从头开始编译代码,所以 -dev 包包含库的 dev 依赖项。如果您正在针对该库进行开发,您只需要安装-dev 包。此question 也可能与您关注的问题相关。

【讨论】:

  • 谢谢。您能否澄清一下什么是“头文件”以及为什么它们会作为包的-dev 版本的一部分出现?
  • 感谢您的详尽解释。我找到了这个教程:dzone.com/articles/install-python-370-on-ubuntu-1804debian-95,它还推荐安装libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev build-essential zlib1g
猜你喜欢
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 2022-10-16
相关资源
最近更新 更多