2010-07-26 4 views
9

Я использовал Python 2.6.5 для создания своего приложения, которое поставляется с sqlite3 3.5.9. Видимо, хотя, как я узнал по другому вопросу, поддержка внешнего ключа не была введена в sqlite3 до версии 3.6.19. Однако Python 2.7 поставляется с sqlite3 3.6.21, поэтому эта работа - я решил, что хочу использовать внешние ключи в своем приложении, поэтому я попробовал перейти на python 2.7.Как обновить пакет sqlite3 в Python 2.6?

Я использую скручен, и я не мог на всю жизнь получить его, чтобы построить. Twisted полагается на zope.interface, и я не могу найти zope.interface для python 2.7 - я думал, что это может просто «работать» в любом случае, но мне нужно просто скопировать все файлы поверх себя и получить все, а не просто использовать самонастраивающиеся пакеты.

Так что я подумал, что было бы разумнее просто перестроить python 2.6 и связать его с новой версией sqlite3. Но я не знаю, как ...

Как бы это сделать?

Я Visual Studio 2008 установлен как компилятор, я прочитал, что это единственное, что действительно поддерживается для Windows, и я бегу 64 битной операционной системы

+0

Вы могли бы бросить еще одну зависимость от кровотечения? ;) – msw

+0

@msw Я понимаю, что обновление до _very latest_ python и ожидание поддержки существующих библиотек - это немного смешно. Но я не думаю, что достижение встроенной поддержки rdbms, поддерживающей базовые функции, пока доступно, особенно если вы относительно новичок в sql и хотите, чтобы ваши таблицы поддерживали вас, если мусор пытается сделать его путь в вашу базу данных. –

+0

Я не думал, что это надуманный и несерьезный, откуда смайлик;) Я думал, что вы покупаете себя в кросс-зависимой неопределенности, которая на самом деле оказалась. Мир. – msw

ответ

3

sqlite3 не является встроенным модулем; это модуль расширения (двоичный код - C: \ Python26 \ DLLs_sqlite3.pyd (на моей машине)). Pyd - это DLL с другим расширением имени файла и только 1 точка входа. Также есть sqlite3.dll, который содержит код SQLite. python.exe не связан ни с одним из них, и поэтому восстановление python.exe не имеет смысла.

Следующая идея - перейти на сайт загрузки pysqlite2 и получить последний установщик Windows для Python 2.6. К сожалению, нет документов о том, какая версия SQLite содержит; нужно установить его, а затем слоняться:

>>> import sqlite3 as standard 
>>> from pysqlite2 import dbapi2 as latest 
>>> for m in (standard, latest): 
... print m.sqlite_version 
... 
3.5.9 
3.6.2 
>>> 

Таким образом, он содержит только SQLite версии 3.6.2, который не имеет реальную внешний ключ поддержки, которую вы хотите.

Я предлагаю вам проверить mailing list, чтобы узнать, есть ли на ваш вопрос ответ, и если не спросить о возможности установки Python 2.6, содержащей более поздний SQLite (например, тот, который включен в Python 2.7).

+0

Я вижу, спасибо, я не совсем знаком с внутренними компонентами python. –

1

Я решил просто дать этому когда я понял, что каждая библиотека, которую я когда-либо устанавливал в python 2.6, находилась в папке моих пакетов сайтов. Я просто ... скопировал сайт-пакеты в мою установку 2.7, и он работает до сих пор. Это самый легкий путь для меня, если это сработает - я буду смотреть дальше, но по крайней мере я могу продолжать развиваться сейчас.

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

+0

+1 это приемлемый ответ, учитывая лабиринт извилистых небольших зависимостей, все одинаковые, что вы оказались. У меня есть back-ported select, minor lib/python3.x/foo.py в python2.6 когда какой-то конкретный проект нуждался в этом (и проверял его до конца, и не думал о том, чтобы нанести ему что-либо, кроме моей локальной установки), но он работает и по сравнению с альтернативами - это инженерный компромисс, который удовлетворял , – msw

+0

Это предполагает, что ни одна из библиотек, которые вы когда-либо устанавливали в пакетах сайтов, не содержала никаких расширений C или Cython - по крайней мере в Windows эти файлы .PYD привязаны к определенной версии Python. –

+0

@John uh oh - Я заметил, что все мои .pyc-файлы потерпели неудачу с «плохим магическим числом», которое, как я предполагал, означает неправильную версию python. Я просто удалил их. В любом случае, установка скрученной, которая была у меня установлена, была установлена ​​с установщика Windows с официального сайта и, похоже, работает (надеюсь) (у скрученного пакета есть C-расширения). В любом случае, это для моей локальной версии. Попытка получить интерпретатор и все его зависимости, установленные на реальном сервере, - это ... Проблема на другой день! –

6

загрузите последнюю версию sqlite3.dll с сайта sqlite и замените sqlite3.dll в каталоге python.

+0

+1000 (если бы я мог). Это просто обновил мой python 2.6, установив на sqlite 3.7.17 (x86) http://www.sqlite.org/download.html – Barton

+0

Работает также с python 2.7 –

Смежные вопросы