我该如何处理软件包?

1 投票
3 回答
724 浏览
提问于 2025-04-15 14:34

我正在尝试安装 pysqlite,但遇到了一些麻烦。我发现最可能的原因是缺少 sqlite 的头文件,所以我需要安装它们。我的系统是 CentOS 5.3(最终版),我用的是 Python 2.6.2。

我还发现我需要 .rpm 文件。只要我有这些文件,我就可以执行:

rpm -i sqlite3-devel-3.n.n.n.rpm

这样一切应该就没问题了。

不过,我不知道在哪里可以找到 sqlite3-devel-3.n.n.n.rpm 文件。这个文件应该已经在我的系统上吗?我用“locate sqlite3-devel-3”找不到它。我需要下载这个文件吗?如果需要,我在哪里可以找到它,应该用哪个版本?也就是说,这个 .rpm 文件可能需要和我电脑上安装的 sqlite 版本一致吧?如果是这样,我该如何查找我 sqlite 的版本呢?

如果我输入“from pysqlite2 import dbapi2 as sqlite”,我得到:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named pysqlite2

而“yum search pysqlite”给我的结果是:

Loaded plugins: fastestmirror
Excluding Packages in global exclude
list Finished
==== Matched: pysqlite ==== python-sqlite.x86_64 : Python bindings
for sqlite.

顺便说一下,我有一个目录: /home/myname/opt/lib/python2.6/sqlite3 在这里我有以下文件:

dbapi2.py  dbapi2.pyc  dbapi2.pyo 
dump.py  dump.pyc  dump.pyo 
__init__.py  __init__.pyc  __init__.pyo  test

如果我输入“import unittest”,然后“import sqlite3 as sqlite”,我得到:

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

提前谢谢你。

3 个回答

1

通常情况下,你应该通过 yum 来安装 python 的 sqlite 模块,类似这样:

yum install python-sqlite

然后你需要修改你的代码,把所有 sqlite2 的地方改成 sqlite3

顺便说一下,每当你看到安装 sqlite3-devel-3.n.n.n.rpm 的说明时,里面的 n 并不是字面意思;它们应该被替换成具体的数字,用来指定这个 rpm 包的版本。

3

Python 2.6(还有一些更早的版本)自带了sqlite这个库,所以你不需要额外去安装什么。只要直接导入它,然后就可以使用了。

2

你可以使用buildout来创建你项目的本地版本。这样可以在没有服务器管理员权限的情况下,安装所有必要的软件包。

想试试的话,可以按照以下步骤操作:

mkdir tmp
cd tmp
wget http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py
python bootstrap.py init
vim buildout.cfg

编辑buildout.cfg文件,把里面的内容替换成以下内容:

[buildout]
parts = sqlite 

[sqlite]
recipe = zc.recipe.egg
eggs = pysqlite
interpreter = mypython

接下来,运行./bin/buildout来重建项目。这会下载所有需要的软件包,并为你创建一个新的解释器,你可以用它来测试是否能访问sqlite。

./bin/buildout
./bin/mypython
>>> import sqlite3

这样你就有了一个可控的环境,可以在里面进行开发。如果想了解更多关于buildout的内容,可以观看2009年pycon上关于Setuptools、Distutils和Buildout的视频。

Python中的Eggs和Buildout部署 - 第1部分

Python中的Eggs和Buildout部署 - 第2部分

Python中的Eggs和Buildout部署 - 第3部分

祝你好运

撰写回答