Как я могу заставить sqlite работать на сервере общего хостинга? - PullRequest
2 голосов
/ 17 мая 2011

Я пытаюсь запустить скрипт на python, используя python 2.6.4. Хостинг-компания установила 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 *
<b>ImportError: No module named _sqlite3</b>

Я думаю, что все настроено правильно, насколько структура каталогов.

-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!

Ответы [ 4 ]

0 голосов
/ 17 мая 2011

Система сборки Python использует файл setup.py для компиляции всех собственных расширений , включая sqlite3.Он ищет общие пути операционной системы для директории sqlite3 include и библиотеки.Если пакет разработки sqlite3 не установлен, Python пропустит компиляцию расширения _sqlite3.so, но чистая часть Python пакета sqlite3 все равно будет установлена.

Возможно, вам потребуется разработка sqlite3 операционной системы.пакет, установленный при компиляции Python и во время выполнения: sqlite3-devel в Centos, libsqlite3-0 и libsqlite3-dev в Ubuntu.

Вот пример связи расширения _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 голосов
/ 17 мая 2011

Для Python 2.4 вам нужны sqlite и привязки, pysqlite 2 или aspw

0 голосов
/ 17 мая 2011

Ни один из файлов, перечисленных в папке sqlite, не является общей библиотекой _sqlite3.pyd Python.Вы уверены, что скомпилировали его при компиляции Python?Что говорит журнал сборки?Я думаю, что есть флаг configure, который необходимо передать.

Либо просто установите pysqlite

0 голосов
/ 17 мая 2011

В общем, первое, что нужно сделать, это спросить своего хозяина.Мне кажется немного странным, что SQLite не установлен (или установлен правильно).Так что они, скорее всего, исправят это довольно быстро, если вы спросите их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...