python - 警告 : IPython History requires SQLite, 您的历史将不会被保存

标签 python sqlite ipython pysqlite

您好,我正在使用带有 Linux 内核 3.5.0-21-generic 的 Ubuntu 12.10(量子)32 位版本。我正在尝试让 IPython 的 History 发挥作用。我已经使用 pythonbrew 和虚拟环境对其进行了设置。在那里我使用 pip 安装 IPython。目前,当我在终端中启动 IPython 时,我得到:

WARNING: IPython History requires SQLite, your history will not be saved
Python 2.7.3 (default, Nov  8 2012, 18:25:10) 
Type "copyright", "credits" or "license" for more information.

IPython 0.13.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

搜索第一行的警告,我找到了this issue report ,所以我回去安装了以下内容:

sudo apt-get install libsqlite0 libsqlite0-dev libsqlite3-0 libsqlite3-dev

然后使用 pip 删除并重新安装 pysqlite

pip uninstall pysqlite
pip install pysqlite

之后我想我会通过导入模块来检查安装:

Python 2.7.3 (default, Nov  8 2012, 18:25:10) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/me/.pythonbrew/pythons/Python-2.7.3/lib/python2.7/sqlite3/__init__.py", line 24, in <module>
    from dbapi2 import *
  File "/home/me/.pythonbrew/pythons/Python-2.7.3/lib/python2.7/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ImportError: No module named _sqlite3

所以现在好像找不到文件_sqlite3.so。那是我找到this SO question的时候.它要么不存在,要么不在我的 PYTHONPATH 环境变量中。搜索文件,我得到:

$ locate _sqlite3.so
/home/me/Desktop/.dropbox-dist/_sqlite3.so
/home/me/epd/lib/python2.7/lib-dynload/_sqlite3.so
/usr/lib/python2.7/lib-dynload/_sqlite3.so

所以文件就在那里,但是当我查看我的 python 路径时:

import sys
for p in sys.path:
    print p

上述包含 _sqlite3.so 的路径均未包含在我的 PYTHONPATH 中。为了咯咯笑,我在终端中将路径/usr/lib/python2.7/lib-dynload 添加到我的 PYTHONPATH,然后再次尝试导入 sqlite3:

Python 2.7.3 (default, Nov  8 2012, 18:25:10) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append("/usr/lib/python2.7/lib-dynload")
>>> import sqlite3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/me/.pythonbrew/pythons/Python-2.7.3/lib/python2.7/sqlite3/__init__.py", line 24, in <module>
    from dbapi2 import *
  File "/home/me/.pythonbrew/pythons/Python-2.7.3/lib/python2.7/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ImportError: /usr/lib/python2.7/lib-dynload/_sqlite3.so: undefined symbol: PyUnicodeUCS4_DecodeUTF8

呃哦。现在我完全卡住了。谁能帮我吗?我还在一些地方读到我可能需要重建 Python。我不知道如何在 pythonbrew 中执行此操作。谁能指出我正确的方向?

最佳答案

I've also read in a few places that I may have to rebuild Python.

这是正确的。 SQLite 是标准库的一部分, 并且是在编译 Python 时构建的。有一些“可选”部分 标准库的一部分,Python 将简单地跳过它(不幸的是,警告很少) 如果在构建时缺少依赖项,sqlite 就是其中之一。 你应该能够只安装 libsqlite3-dev, 然后重建 Python,你应该被设置。 密切关注构建消息, 因为他们确实报告了由于缺少依赖项而跳过了哪些模块。

关于python - 警告 : IPython History requires SQLite, 您的历史将不会被保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14173271/

相关文章:

python - 使用 PULP 进行 CPLEX 间隙设置

python - 如何集成 ZSH 和 (i)python?

python - 不同环境下搜索结果不同

github - 如何轻松查看 github 上带有 ipynb 扩展名的文件

python - OpenCV + Raspberry PI 就像一个房间监视器

python - 自动包装/装饰所有 pytest 单元测试

Python:如何在给定索引列表的字符串中替换子字符串

android - 与本地 android 和 html5 共享数据库(sqlite 错误没有这样的表)

在 View 中连接两个表时sqlite3日期操作?

编译 : near "a": syntax error (code 1): , 时 android.database.sqlite.SQLiteException : INSERT INTO characters(a, b) VALUES (?,?)