Почему pysqlite не работает должным образом?

Я попытался установить pysqlite. Некоторые подозрительные вещи начинают появляться во время установки. Почему я напечатал:

python setup.py build

В итоге получил следующее сообщение:

src/module.c:286: error: ‘SQLITE_PRAGMA’ undeclared here (not in a function)
src/module.c:287: error: ‘SQLITE_READ’ undeclared here (not in a function)
src/module.c:288: error: ‘SQLITE_SELECT’ undeclared here (not in a function)
src/module.c:289: error: ‘SQLITE_TRANSACTION’ undeclared here (not in a function)
src/module.c:290: error: ‘SQLITE_UPDATE’ undeclared here (not in a function)
src/module.c:291: error: ‘SQLITE_ATTACH’ undeclared here (not in a function)
src/module.c:292: error: ‘SQLITE_DETACH’ undeclared here (not in a function)
src/module.c: In function ‘init_sqlite’:
src/module.c:419: warning: implicit declaration of function ‘sqlite3_libversion’
src/module.c:419: warning: passing argument 1 of ‘PyString_FromString’ makes pointer from integer without a cast
error: command 'gcc' failed with exit status 1

Я просто проигнорировал последнюю строчку и решил продолжить. Итак, я набрал:

python setup.py install

И снова я получил похожее сообщение об ошибке:

src/module.c:288: error: ‘SQLITE_SELECT’ undeclared here (not in a function)
src/module.c:289: error: ‘SQLITE_TRANSACTION’ undeclared here (not in a function)
src/module.c:290: error: ‘SQLITE_UPDATE’ undeclared here (not in a function)
src/module.c:291: error: ‘SQLITE_ATTACH’ undeclared here (not in a function)
src/module.c:292: error: ‘SQLITE_DETACH’ undeclared here (not in a function)
src/module.c: In function ‘init_sqlite’:
src/module.c:419: warning: implicit declaration of function ‘sqlite3_libversion’
src/module.c:419: warning: passing argument 1 of ‘PyString_FromString’ makes pointer from integer without a cast
error: command 'gcc' failed with exit status 1

После этого я хотел попробовать, работает ли pysqlite. Если в режиме командной строки python я набираю

from pysqlite2 import *

Питон не жалуется. Однако, если я попытаюсь следовать примеру в моей книге:

from pysqlite2 import dbapi2 as sqlite

Я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pysqlite2/dbapi2.py", line 27, in <module>
    from pysqlite2._sqlite import *
ImportError: No module named _sqlite

У кого-нибудь есть идеи, почему это происходит и как эту проблему можно решить. Кстати, я установил новую версию Python. «python -V» дает мне «Python 2.6.2». Спасибо заранее за любую помощь.


person Verrtex    schedule 22.09.2009    source источник
comment
Вы в курсе, что поддержка SQLite есть в стандартной библиотеке? По крайней мере, с версии python 2.5   -  person codeape    schedule 22.09.2009


Ответы (3)


Нужен урок по компиляции расширений python, какой дистрибутив вы используете? Кажется, вам не хватает заголовков sqlite с заданными определениями макросов. Когда установка python запускается, она компилирует привязки к собственному двоичному файлу sqlite и копирует несколько файлов .py в библиотеку. _sqlite обычно представляет собой файл .pyd (эквивалентный dll), который имеет вызовы библиотеки sqlite, в вашем случае, которая не была построена.

Проверьте наличие заголовков sqlite и т. д.

person whatnick    schedule 22.09.2009

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

Вы не можете просто игнорировать последнюю строку. Он говорил вам, что произошла ошибка, поэтому он не мог скомпилироваться. Следующее, что вы запустили, сообщило вам, что оно не может быть установлено, потому что оно не может скомпилироваться. Затем ваш питон сказал вам, что не может запустить код, потому что он не установлен. Вам нужно, чтобы этап компиляции работал, прежде чем переходить к его установке.

person RHSeeger    schedule 22.09.2009
comment
ХОРОШО. Но как скомпилировать и установить? Что означает сообщение об ошибке? - person Verrtex; 22.09.2009
comment
К сожалению, я, скорее всего, не смогу помочь вам с его компиляцией. Лучшее, что я мог сделать, это указать, что это была фаза компиляции, которая не удалась, и все, что было в прошлом, не помогло решить проблему. - person RHSeeger; 22.09.2009

Правильный способ сборки pysqlite теперь на сайте.

$ tar xvfz <version>.tar.gz 
$ cd <version> 
$ python setup.py build_static install 

build_static загрузит последний код sqlite и статически скомпилирует его. Для заметки, я только что сделал это на общем хосте 1and1.

http://trac.edgewall.org/wiki/PySqlite#Buildingpysqlite

person Neskie    schedule 19.11.2010