如何获得_sqlite3.so文件?

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

我安装了Python 2.6.2,因为我没有管理员权限,所以是“本地”安装的。我想用一个叫“sqlite3”的模块(在早期版本中叫“pysqlite”)。理论上来说,这个模块应该是默认包含在这个Python版本里的,所以我应该能顺利使用它。但是,我遇到了一些问题。当我输入:

from sqlite3 import *

我得到的结果是:

Traceback (most recent call last):
  File "", line 1, in File "/home/verrtex/opt/lib/python2.6/sqlite3/init.py", line 24, in
    from dbapi2 import *
  File "/home/verrtex/opt/lib/python2.6/sqlite3/dbapi2.py", line 27, in
    from _sqlite3 import * 
ImportError: No module named _sqlite3

正如我之前提到的,这个问题可能是因为模块在尝试导入一个叫做 _sqlite3 的东西时失败了,所以找不到 _sqlite3.so 文件。这个解释得到了支持,因为我在我的“/home/verrtex/opt/lib/python2.6/lib-dynload”目录下没有 _sqlite3.so 文件。所以,我需要解决这个问题(我需要把这个文件放到这个目录里)。

我发现要解决这个问题,我需要“安装sqlite3并重新编译Python”。我还发现可以通过“从源代码构建并把库移动到 /usr/lib/python2.5/lib-dynload/”来解决这个问题。

不过,我不太清楚我到底该怎么做。我是应该安装一个叫“sqlite3”的Python模块,还是应该安装sqlite数据库?顺便说一下,我已经有管理员全局安装的sqlite数据库。我可以用它吗,还是我还需要安装自己的数据库?另外,我没有管理员权限,这会是个问题吗?我需要安装一个Python模块吗?在这种情况下,没有管理员权限会是个问题吗?

我还被告知要从SQLite下载页面获取源文件,解压缩文件,然后进入解压后的目录,执行:

./configure
make
make install

然后我需要把新编译的文件复制到我的Python目录。我应该复制所有新编译的文件吗?具体应该复制到哪个目录(我的Python目录下有一些子目录)?

非常感谢任何帮助,因为我在这个问题上卡了很久。

附言:我的操作系统是CentOS 5.3(最终版)。

2 个回答

1

虽然你可能已经找到了解决办法,但我还是把我的方法写下来,给那些遇到同样问题的人。

我的操作系统是CentOS 6.3(最终版),使用的是python2.6

我在系统中安装了python2.7.3,但问题依然存在。(_sqlite3.so文件应该在/path/to/python2.7.3/lib/python2.7/lib-dynload这个路径下,前提是python2.7.3已经安装好。因为在安装python2.7之前,我已经安装了sqlite-autoconf-3071502.tar.gz这个包。)

然后,我把/path/to/python2.6/lib/python2.6/lib-dynload/_sqlite3.so这个文件复制到了python2.7的路径下。接着在python命令行中输入:

>>> import sqlite3

或者

>>> import _sqlite3

没有报错。

可惜的是,当我运行我的python脚本时,之前的那个讨厌的错误又出现了。我安装了sqlite-devel(可以用sudo yum install sqlite-devel命令,或者在这里下载),然后重新安装了python2.7.3。再次运行我的python脚本。谢天谢地!那个讨厌的错误终于解决了。

1

你的 sys.path 可能没有指向你本地安装的 Python 版本,或者你并没有运行你认为的 Python 2.6.2。

如果都不是这样的话,你需要安装 SQLite 的开发头文件(比如 sqlite-dev),然后重新编译 Python。在编译结束时要特别注意,因为它会提示你由于缺少依赖项而没有构建的内容。

编辑:重新阅读问题。

编辑 2:另外,不要这样做:

from module import *

请这样做:

from module import what_i_need
import module2

撰写回答