Pyt*_*Jin 13 python sqlite ipython pysqlite
嗨,我正在使用Ubuntu版本12.10(量子)32位与Linux内核3.5.0-21通用.我正试图让IPython的历史发挥作用.我已经使用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.
Run Code Online (Sandbox Code Playgroud)
搜索第一行中的警告,我找到了此问题报告,因此我返回并安装了以下内容:
sudo apt-get install libsqlite0 libsqlite0-dev libsqlite3-0 libsqlite3-dev
Run Code Online (Sandbox Code Playgroud)
然后使用pip删除并重新安装pysqlite
pip uninstall pysqlite
pip install pysqlite
Run Code Online (Sandbox Code Playgroud)
之后我想我会通过导入模块来检查安装:
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
Run Code Online (Sandbox Code Playgroud)
所以现在似乎无法找到文件_sqlite3.so.那是我发现这个问题的时候.要么它不存在,要么它不在我的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
Run Code Online (Sandbox Code Playgroud)
所以文件在那里,但当我查看我的python路径时:
import sys
for p in sys.path:
print p
Run Code Online (Sandbox Code Playgroud)
上面没有包含_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
Run Code Online (Sandbox Code Playgroud)
哦,哦.现在我完全卡住了.谁能帮我吗?我还在一些地方读过,我可能要重建Python.我不知道如何在pythonbrew中执行此操作.谁能指出我正确的方向?
min*_*nrk 12
我还在一些地方读过,我可能要重建Python.
这是对的.SQLite是标准库的一部分,在编译Python时构建.标准库中有一些"可选"部分,如果在构建时缺少依赖项,Python将简单地跳过这些部分(最小的警告),而sqlite就是其中之一.你应该能够安装libsqlite3-dev
,然后重建Python,你应该设置.密切关注构建消息,因为它们会报告由于缺少依赖性而跳过哪些模块.
感谢minrk指出我正确的方向.我所要做的就是重建python.我已经为那些使用pythonbrew的人概述了以下步骤.请注意,我已经libsqlite3-dev
在问题部分安装了包.
首先,在加载了适当版本的python和虚拟环境后运行命令:
$ pip freeze -l > requirements.txt
Run Code Online (Sandbox Code Playgroud)
这给了我们一个文本文件列表,列出了pythonbrew中这个特定python版本的虚拟环境中安装的所有pip包.然后我们从pythonbrew中删除python的版本并重新安装它(这是"rebuild python"步骤):
$ pythonbrew uninstall 2.7.3
$ pythonbrew install 2.7.3
Run Code Online (Sandbox Code Playgroud)
之后,我们切换到新安装的python版本2.7.3并创建一个新的虚拟环境(我称之为"sci"):
$ pythonbrew switch 2.7.3
$ pythonbrew venv create sci
$ pythonbrew venv use sci
Run Code Online (Sandbox Code Playgroud)
理想情况下,您应该能够运行命令:
$ pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
并且根据这个 pip应该重新安装你在虚拟环境中拥有的所有模块,然后才能破坏那个版本的python(2.7.3).无论出于何种原因,它都不适用于我,因此我使用pip个性手动安装了所有模块.
$ 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.
Run Code Online (Sandbox Code Playgroud)
和IPython历史有效!