【问题标题】:Why my python does not see pysqlite?为什么我的 python 看不到 pysqlite?
【发布时间】:2009-09-25 17:04:40
【问题描述】:

我想在 Python 和 sqlite 之间建立一个接口。两者都安装在机器上。我有一个旧版本的 Python (2.4.3)。因此,默认情况下不包含 pysqlite。首先,我尝试通过安装 pysqlite 来解决这个问题,但我没有朝这个方向成功。我解决该问题的第二次尝试是安装新版本的 Python。我没有机器上的root权限。所以,我在本地安装了它。 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 版(最终版)。

【问题讨论】:

    标签: python sqlite pysqlite


    【解决方案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

    【讨论】:

    • 我有目录 /home/verrtex/opt/lib/python2.6/sqlite3。在这个目录中,我有以下文件: dbapi2.py dbapi2.pyc dbapi2.pyo dump.py dump.pyc dump.pyo init.py init.pyc 初始化.pyo
    • 我更改了 .bashrc 和 .bash_profile 中的 PYTHONPATH。我来源这些文件。它没有帮助。
    • 顺便问一下,如何找到包含 pysqlite 库的目录?我应该搜索哪个文件? _sqlite3.so?
    • _sqlite3.so 确实是您所缺少的。如果找不到,您可能需要重新安装——如果您执行从源代码安装,如果无法创建文件或其他任何情况,您将收到非常明确的警告像这样。
    • 这些不会直接提供帮助,因为 Python 共享库需要用户库没有的特定入口点。但是,由于您确实在计算机上有 SQLite 库,您应该能够从源代码构建 Python,并且./configure 应该检测到SQLite 的存在并针对它构建一个 Python 库。您可能需要在 ./configure 选项中明确提及 SQLite,我不确定。
    【解决方案2】:

    你有一个“slite3.py”(实际上它相当于一个包,sqlite3/__init__.py,所以import sqlite3 本身很好,但是该模块反过来尝试import _sqlite3 并且失败了,所以它没有找到@ 987654324@。它应该在您本地 Python 根目录下的 python2.6/lib-dynload 中,并且应该指示 ld 它也有权从该目录加载动态库(通常通过设置适当的环境变量,例如在您的 .bashrc 中)。你有那个 lib-dynload 目录吗?里面有什么?你有哪些环境变量,其中包含字符串 LD(大写),即 shell 提示符下的 env|grep LD

    【讨论】:

    • 我有 /home/verrtex/opt/lib/python2.6/lib-dynload 但没有 sql 文件。 “env | grep LD”告诉我“OLDPWD=/home/verrtex/opt/lib/python2.6”
    • 我想说在我的 /home/verrtex/opt/lib/python2.6/lib-dynload 目录中没有包含子字符串 sql 的文件。
    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多