警告:IPython历史需要SQLite,将不会保存您的历史记录

2024-05-16 10:41:26 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正在使用UbuntuRelease12.10(quantal)32位Linux内核3.5.0-21-generic。我想让伊普顿的历史发挥作用。我用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中。对于giggles,我将路径/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。我不知道怎么用Python做这个。有人能指点我正确的方向吗?


Tags: pipinimporthomeforsolibipython
3条回答

感谢明克指引我正确的方向。我所要做的就是重建python。我已经为那些使用pythonbrew的人概述了下面的步骤。注意,我已经在问题部分安装了libsqlite3-dev包。

首先,加载正确版本的python和virtual environment后,运行以下命令:

$ pip freeze -l > requirements.txt

这为我们提供了一个文本文件列表,其中列出了pythonbrew中这个特定python版本在虚拟环境中安装的所有pip包。然后,我们从pythonbrew中删除python的版本并重新安装它(这是“重建python”步骤):

$ pythonbrew uninstall 2.7.3
$ pythonbrew install 2.7.3

之后,我们切换到新安装的python版本2.7.3,并创建一个新的虚拟环境(我称之为“sci”):

$ pythonbrew switch 2.7.3
$ pythonbrew venv create sci
$ pythonbrew venv use sci

理想情况下,您应该能够运行以下命令:

$ pip install -r requirements.txt

根据this的说法,pip应该重新安装虚拟环境中的所有模块,然后再删除python版本(2.7.3)。不管出于什么原因,它都不适合我,所以我使用pip personality手动安装了所有模块。

$ ipython --pylab

Python 2.7.3 (default, Jan  5 2013, 18:48:27) 
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.

而伊普顿的历史作品!

什么对我有效(使用osx+自制+酿造的python):

# Reinstall Python 2.7 with sqlite
brew remove python
brew install readline sqlite gdbm --universal
brew install python --universal --framework

# Reinstall iPython with correct bindings
pip uninstall ipython    
pip install ipython

你应该好好去。

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

这是正确的。SQLite是标准库的一部分, 在编译Python时生成。有几个“可选”部分 标准库,Python只需跳过它(不幸的是,警告很小) 如果在构建时缺少依赖项,而sqlite就是其中之一。 你应该可以安装libsqlite3-dev, 然后重新构建Python,您应该被设置。 关注构建消息, 当它们报告由于缺少依赖项而跳过的模块时。

相关问题 更多 >