2011-05-17 98 views
2

我想使用python 2.6.4运行python脚本。托管公司已安装2.4,所以我编译我自己的2.6.4在一个类似的服务器上,然后将文件转移到〜/ opt/python。那部分似乎工作正常。无论如何,当我运行下面的脚本,我得到ImportError: No module named _sqlite3,我不知道该怎么做来解决这个问题。如何让sqlite在共享托管服务器上工作?

大多数线上线程提到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的答案工作得很好。我需要在我编译的机器上安装dev软件包,以便将它添加到sqlite3.so和相关文件中。还发现在答案中的链接非常有帮助。谢谢@samplebias!

回答

0

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

这里的_sqlite3.so扩展联动的例子我的Ubuntu系统上:

% 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 
+0

我建立的机器是ubuntu 64.我会用'apt-get install sqlite3 libsqlite3-dev'安装sqlite3(dev软件包)吗?在构建python时,是否有语法或者会自动包含它? – cwd 2011-05-17 14:19:19

+0

是的,一旦你在构建主机上安装了sqlite3包,Python的'setup.py'就会找到它们并编译本地扩展。然后,您需要将相关库(包括sqlite3本身)复制到托管服务器,并确保共享链接程序可以找到它们(例如,您可能必须设置“LD_LIBRARY_PATH”)。我对其他类似问题的答案[显示如何提取Ubuntu软件包并在没有管理员权限的情况下使用它们](http://stackoverflow.com/questions/5976030/how-to-install-lxml-for-python-without-administative-版权上的Linux/5981037#5981037)。 – samplebias 2011-05-17 15:14:33

0

一般来说,要做的第一件事就是询问你的主人。我似乎有点奇怪,SQLite没有安装(或正确安装)。所以如果你问他们,他们可能会很快修复它。

0

为Python 2.4,你需要SQLite和绑定,pysqlite 2aspw

+0

没有了OP明确指定他的关于Python 2.6.4? – 2011-05-17 05:55:39

+0

@Eli,也许我误解了它。他似乎有一些python 2.6的问题,并且由于主机上已经有python 2.4,所以我猜python 2.4解决方案是可以接受的。 – 2011-05-17 06:05:47

0

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

另外,只需安装pysqlite

相关问题