python - 如何让 sqlite 在共享主机服务器上运行?

标签 python linux unix sqlite

我正在尝试使用 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 

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

我认为就目录结构而言,我已经设置好了所有内容。

-jailshell-3.2$ find `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$ find `pwd`

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

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

这是我的 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

关于python - 如何让 sqlite 在共享主机服务器上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6026485/

相关文章:

python显示矩阵除法后的剩余值

python - 在groupby Python后查找配对记录

linux - 在 Raspberry pi 3 (Ubuntu MATE 16.04) 上安装后出现 WebIOPi 错误

c - 如果一段时间后没有输入,则退出 for 循环

linux - Bash:将任何名为 n10 的目录的内容向上移动一级

c++ - 基于 UNIX 的聊天室::使用 getch()、POSIX 线程存储每个字符

python - TypeError : ufunc 'isnan' not supported for the input types, 并且无法安全强制输入

python - ROS1 catkin_make 失败 : catkin_install_python() called without required DESTINATION argument

linux - 将默认端口重定向到 linux/unix 中的特定端口

Java - 在什么情况下 JVM 可能会突然崩溃?