为什么我的Python找不到pysqlite?

2 投票
2 回答
3638 浏览
提问于 2025-04-15 14:36

我想在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 个回答

1

你有一个叫“slite3.py”的文件(其实它对应的是一个包,sqlite3/__init__.py,所以直接用import sqlite3是没问题的,但这个模块又试图去import _sqlite3,结果失败了,因为找不到_sqlite3.so文件。这个文件应该在你本地Python根目录下的python2.6/lib-dynload文件夹里,并且需要告诉系统它有权限从那个目录加载动态库(通常是通过设置合适的环境变量,比如在你的.bashrc文件中)。你有这个lib-dynload目录吗?里面有什么?你有哪些环境变量包含了大写字母的LD,比如在命令行输入env|grep LD

1

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

撰写回答