为什么我的Python找不到pysqlite?
我想在Python和sqlite之间建立一个接口。这两个软件都已经安装在我的电脑上。我之前用的是一个旧版本的Python(2.4.3),所以默认没有包含pysqlite。最开始我尝试通过安装pysqlite来解决这个问题,但没成功。我的第二个尝试是安装一个新的Python版本。因为我没有管理员权限,所以我选择在本地安装。新的Python版本是(2.6.2)。据我所知,这个版本应该默认包含pysqlite(现在叫“sqlite3”,而不是以前的“pysqlite2”)。
但是,如果我输入:
from sqlite3 import *
我得到的结果是:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/verrtex/opt/lib/python2.6/sqlite3/__init__.py", line 24, in <module>
from dbapi2 import *
File "/home/verrtex/opt/lib/python2.6/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ImportError: No module named _sqlite3
需要注意的是,上面的错误信息和我输入“from blablabla import *”时得到的错误信息是不同的:
追踪(最近的调用最后):
文件 "", 第 1 行,
ImportError: 没有名为 blablabla 的模块
所以,Python似乎能看到一些和pysqlite相关的东西,但还是有一些问题。有没有人能帮我解决这个问题呢?
附注:我使用的是CentOS 5.3(最终版)。
2 个回答
你有一个叫“slite3.py”的文件(其实它对应的是一个包,sqlite3/__init__.py
,所以直接用import sqlite3
是没问题的,但这个模块又试图去import _sqlite3
,结果失败了,因为找不到_sqlite3.so
文件。这个文件应该在你本地Python根目录下的python2.6/lib-dynload
文件夹里,并且需要告诉系统它有权限从那个目录加载动态库(通常是通过设置合适的环境变量,比如在你的.bashrc文件中)。你有这个lib-dynload目录吗?里面有什么?你有哪些环境变量包含了大写字母的LD,比如在命令行输入env|grep LD
?
在Windows系统上,_sqlite3.pyd
文件通常放在C:\Python26\DLLs
这个地方。而在*nix系统上,它的路径大概是/usr/lib/python2.6/lib-dynload/_sqlite3.so
。很可能是你缺少这个共享库,或者你的PYTHONPATH
设置不正确。
你提到没有以超级用户身份安装,可能是路径设置有问题;你可以手动让Python去某个路径查找_sqlite3.so
,方法是
import sys
sys.path.append("/path/to/my/libs")
不过,更好的方法是直接在你的.bashrc
文件或者其他登录文件中修改PYTHONPATH
。