【问题标题】:How can I get sqlite working on a shared hosting server?如何让 sqlite 在共享托管服务器上工作?
【发布时间】:2011-05-17 05:10:59
【问题描述】:

我正在尝试使用 python 2.6.4 运行 python 脚本。托管公司安装了 2.4,所以我在类似的服务器上编译了自己的 2.6.4,然后将文件移动到 ~/opt/python。那部分似乎工作正常。

无论如何,当我运行下面的脚本时,我收到了ImportError: No module named _sqlite3,但我不确定如何解决这个问题。

大多数在线线程都提到 sqlite / sqlite3 包含在 python 2.6 中 - 所以我不确定为什么这不起作用。

-jailshell-3.2$ ./pyDropboxValues.py 回溯(最近一次通话最后): 文件“./pyDropboxValues.py”,第 21 行,在 导入 sqlite3 文件“/home/myAccount/opt/lib/python2.6/sqlite3/__init__.py”,第 24 行,在 从 dbapi2 导入 * 文件“/home/myAccount/opt/lib/python2.6/sqlite3/dbapi2.py”,第 27 行,在 从 _sqlite3 导入 * ImportError: 没有名为 _sqlite3 的模块

就目录结构而言,我想我已经把所有东西都设置好了。

-jailshell-3.2$ 查找 `pwd` -type d /home/myAccount/opt /home/myAccount/opt/bin /home/myAccount/opt/include /home/myAccount/opt/include/python2.6 /home/myAccount/opt/lib /home/myAccount/opt/lib/python2.6 /home/myAccount/opt/lib/python2.6/distutils /home/myAccount/opt/lib/python2.6/distutils/command /home/myAccount/opt/lib/python2.6/distutils/tests /home/myAccount/opt/lib/python2.6/compiler /home/myAccount/opt/lib/python2.6/test /home/myAccount/opt/lib/python2.6/test/decimaltestdata /home/myAccount/opt/lib/python2.6/config /home/myAccount/opt/lib/python2.6/json /home/myAccount/opt/lib/python2.6/json/tests /home/myAccount/opt/lib/python2.6/email /home/myAccount/opt/lib/python2.6/email/test /home/myAccount/opt/lib/python2.6/email/test/data /home/myAccount/opt/lib/python2.6/email/mime /home/myAccount/opt/lib/python2.6/lib2to3 /home/myAccount/opt/lib/python2.6/lib2to3/pgen2 /home/myAccount/opt/lib/python2.6/lib2to3/fixes /home/myAccount/opt/lib/python2.6/lib2to3/tests /home/myAccount/opt/lib/python2.6/xml /home/myAccount/opt/lib/python2.6/xml/parsers /home/myAccount/opt/lib/python2.6/xml/sax /home/myAccount/opt/lib/python2.6/xml/etree /home/myAccount/opt/lib/python2.6/xml/dom /home/myAccount/opt/lib/python2.6/site-packages /home/myAccount/opt/lib/python2.6/logging /home/myAccount/opt/lib/python2.6/lib-dynload /home/myAccount/opt/lib/python2.6/sqlite3 /home/myAccount/opt/lib/python2.6/sqlite3/test /home/myAccount/opt/lib/python2.6/encodings /home/myAccount/opt/lib/python2.6/wsgiref /home/myAccount/opt/lib/python2.6/multiprocessing /home/myAccount/opt/lib/python2.6/multiprocessing/dummy /home/myAccount/opt/lib/python2.6/curses /home/myAccount/opt/lib/python2.6/bsddb /home/myAccount/opt/lib/python2.6/bsddb/test /home/myAccount/opt/lib/python2.6/idlelib /home/myAccount/opt/lib/python2.6/idlelib/Icons /home/myAccount/opt/lib/python2.6/tmp /home/myAccount/opt/lib/python2.6/lib-old /home/myAccount/opt/lib/python2.6/lib-tk /home/myAccount/opt/lib/python2.6/hotshot /home/myAccount/opt/lib/python2.6/plat-linux2 /home/myAccount/opt/lib/python2.6/ctypes /home/myAccount/opt/lib/python2.6/ctypes/test /home/myAccount/opt/lib/python2.6/ctypes/macholib /home/myAccount/opt/share /home/myAccount/opt/share/man /home/myAccount/opt/share/man/man1

最后是sqlite3目录的内容:

-jailshell-3.2$ 查找“密码” /home/myAccount/opt/lib/python2.6/sqlite3 /home/myAccount/opt/lib/python2.6/sqlite3/__init__.pyo /home/myAccount/opt/lib/python2.6/sqlite3/dump.pyc /home/myAccount/opt/lib/python2.6/sqlite3/__init__.pyc /home/myAccount/opt/lib/python2.6/sqlite3/dbapi2.pyo /home/myAccount/opt/lib/python2.6/sqlite3/dbapi2.pyc /home/myAccount/opt/lib/python2.6/sqlite3/dbapi2.py /home/myAccount/opt/lib/python2.6/sqlite3/dump.pyo /home/myAccount/opt/lib/python2.6/sqlite3/__init__.py /home/myAccount/opt/lib/python2.6/sqlite3/dump.py

我觉得我需要在sqlite3 目录中添加一些东西——也许是 sqlite3.so?但我不知道从哪里得到。

我在这里做错了什么?请记住,我使用的是共享主机,这意味着在另一台服务器上安装/编译,然后将文件复制过来。谢谢! :)

更新 只是想确认@samplebias 的答案确实很好。我需要在我正在编译的机器上安装开发包,以便将其添加到 sqlite3.so 和相关文件中。还发现答案中的链接非常有帮助。谢谢@samplebias!

【问题讨论】:

    标签: python linux unix sqlite


    【解决方案1】:

    Python 的构建系统uses a setup.py file to compile all of the native extensions,包括 sqlite3。它搜索 sqlite3 包含和库目录的常见操作系统路径。如果未安装 sqlite3 开发包,Python 将跳过编译 _sqlite3.so 扩展,但仍会安装 sqlite3 包的纯 Python 部分。

    您需要在编译 Python 时和运行时安装操作系统的 sqlite3 开发包:Centos 上为 sqlite3-devel,Ubuntu 上为 libsqlite3-0libsqlite3-dev

    这是我的 Ubuntu 系统上 _sqlite3.so 扩展链接的示例:

    % ldd /usr/lib/python2.6/lib-dynload/_sqlite3.so | grep sqlite3
        libsqlite3.so.0 => /usr/lib/libsqlite3.so.0 (0x00007f29ef3be000)
    % dpkg -S /usr/lib/libsqlite3.so.0
        libsqlite3-0: /usr/lib/libsqlite3.so.0
    

    【讨论】:

    • 我正在构建的机器是 ubuntu 64。我会用apt-get install sqlite3 libsqlite3-dev 安装 sqlite3(开发包)吗?构建python时,有语法还是会自动包含?
    • 是的,一旦你在构建主机上安装了 sqlite3 包,Python 的setup.py 将找到它们并编译原生扩展。然后,您需要将相关库(包括 sqlite3 本身)复制到托管服务器并确保共享链接器可以找到它们(例如,您可能必须设置 LD_LIBRARY_PATH)。我对类似问题的另一个回答shows how to extract Ubuntu packages and use them without admin rights
    【解决方案2】:

    一般来说,首先要做的是询问你的主人。没有安装(或正确安装)SQLite 似乎有点奇怪。所以如果你问他们,他们可能会很快解决。

    【讨论】:

      【解决方案3】:

      对于 python 2.4,您需要 sqlite 和绑定,pysqlite 2aspw

      【讨论】:

      • OP 没有明确指定他使用的是 Python 2.6.4 吗?
      • @Eli,也许我误解了。看来他对 python 2.6 有一些问题,由于主机上已经有 python 2.4,我想 python 2.4 的解决方案是可以接受的。
      【解决方案4】:

      sqlite 文件夹中列出的所有文件都不是_sqlite3.pyd Python 共享库。你确定你在编译Python的时候编译了它吗?构建日志说什么?我认为需要传递一个configure 标志。

      或者,只需安装pysqlite

      【讨论】:

        猜你喜欢
        • 2019-06-07
        • 1970-01-01
        • 1970-01-01
        • 2013-07-18
        • 2023-03-10
        • 2011-07-16
        • 2014-10-17
        • 2023-04-05
        • 2012-07-17
        相关资源
        最近更新 更多