2010-07-26 11 views
9

Użyłem Pythona 2.6.5 do zbudowania aplikacji, która przyszła z sqlite3 3.5.9. Najwyraźniej jednak, jak dowiedziałem się w innym pytaniu, obsługa klucza obcego nie została wprowadzona w sqlite3 do wersji 3.6.19. Jednak Python 2.7 jest dostarczany z sqlite3 3.6.21, więc ta praca - zdecydowałem, że chcę używać obcych kluczy w mojej aplikacji, więc próbowałem aktualizacji do Pythona 2.7.Jak mogę uaktualnić pakiet sqlite3 w Pythonie 2.6?

Używam pokręconych, a ja nie mogłem, aby moje życie mogło je zbudować. Twisted polega na zope.interface i nie mogę znaleźć zope.interface dla Pythona 2.7 - myślałem, że to może i tak "zadziałać", ale musiałem po prostu skopiować wszystkie pliki na siebie i wszystko samemu zrobić, zamiast po prostu korzystać z samodzielnych pakietów instalacyjnych.

Więc pomyślałem, że mądrzej byłoby po prostu ponownie zbudować python 2.6 i połączyć go z nową wersją sqlite3. Ale nie wiem jak -

Jak to zrobić?

Mam Visual Studio 2008 zainstalowany jako kompilatora, czytałem, że jest jedyną osobą, która naprawdę jest obsługiwana w systemie Windows, a ja z systemem operacyjnym 64 bitowym

+0

Czy możesz wrzucić jeszcze jedną zależność od krwawienia? ;) – msw

+0

@msw Rozumiem, że uaktualnienie do _very latest_ python i oczekiwanie, że istniejące biblioteki obsługują to jest trochę idiotyczne. Ale nie sądzę, że sięganie po wbudowaną obsługę rdbms, która obsługuje podstawowe funkcje, jest do tej pory sprowadzane, zwłaszcza gdy jesteś stosunkowo nowy w sql i chcesz mieć pewność, że twoje tabele będą cię wspierać, jeśli śmieci spróbują zrobić w drodze do bazy danych. –

+0

Nie sądziłem, że to zbyt daleko idące i nie było poważne, skąd pochodzi buźka;) Wydawało mi się, że kupujesz się do limbo zależności, które w rzeczywistości okazałeś się być. Pokój. – msw

Odpowiedz

3

sqlite3 nie jest wbudowanym modułem; jest to moduł rozszerzenia (plik binarny to C: \ Python26 \ DLLs_sqlite3.pyd (na moim komputerze)). Pyd to biblioteka DLL z innym rozszerzeniem nazwy pliku i tylko 1 punktem wejścia. Istnieje również plik sqlite3.dll, który zawiera kod SQLite. Python.exe nie jest połączony z żadnym z nich, a zatem odbudowanie python.exe nie ma sensu.

Następnym pomysłem jest przejście do strony pobierania pysqlite2 i pobranie najnowszego instalatora Windows dla Pythona 2.6. Niestety nie ma dokumentów o tym, która wersja SQLite zawiera; trzeba zainstalować go, a następnie syf o:

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

Tak, to zawiera tylko SQLite w wersji 3.6.2, która nie ma prawdziwy klucz wsparcia zagranicznego, które chcesz.

Proponuję, abyś sprawdził, czy twoje pytanie zostało tam odebrane, a jeśli nie, zapytaj o możliwość zainstalowania instalatora Python 2.6 zawierającego późniejszy SQLite (np. Ten dołączony do Pythona 2.7).

+0

Widzę, dziękuję, nie jestem całkiem zaznajomiony z wewnętrznymi pytonami. –

1

postanowiłem ja po prostu dać to strzał, gdy uświadomiłem sobie, że każda biblioteka, którą kiedykolwiek zainstalowałem w Pythonie 2.6, znajdowała się w moim folderze z lokacjami. Po prostu ... skopiowałem pakiety serwisowe do mojej instalacji 2.7 i działa to jak dotąd. Jest to zdecydowanie najłatwiejsza droga, jeśli to zadziała - przyjrzę się temu dalej, ale przynajmniej mogę dalej się rozwijać.

Nie przyjmuję tej odpowiedzi, ponieważ nie odpowiada ona nawet na moje pytanie, ale rozwiązuje mój problem, o ile mogę to stwierdzić.

+0

+1 Jest to akceptowalna odpowiedź, biorąc pod uwagę labirynt krętych, małych zależności, wszystkie podobne, w których się znalazłeś. Złożyłem z powrotem wybrane, mniejsze lib/python3.x/foo.py do python2.6 kiedy konkretny projekt go potrzebował (i testował to z piekła rodem, i nie myślał o tym, że go zadaję na czymkolwiek poza lokalną instalacją), ale działa i, w porównaniu z alternatywami, jest kompromisem inżynieryjnym, który był satysfakcjonujący . – msw

+0

Zakłada się, że żadna z bibliotek, które kiedykolwiek zainstalowałeś w pakietach serwisowych, nie zawiera żadnych rozszerzeń C ani Cython - przynajmniej w systemie Windows te pliki .PYD są powiązane z konkretną wersją Pythona. –

+0

@John uh oh - Zauważyłem, że wszystkie moje pliki .pyc nie powiodły się "złym numerem magicznym", który zakładałem, że oznacza złą wersję Pythona. Właśnie je usunąłem. W każdym razie, instalacja skręconej, którą miałem, została zainstalowana z instalatora Windows z oficjalnej strony i wygląda na to, że działa (mam nadzieję) (skręcona paczka ma rozszerzenia C). W każdym razie dotyczy to mojej lokalnej wersji. Próbuję przekonać tłumacza i wszystkie jego zależności skonfigurowane na serwerze na żywo ... Problem na inny dzień! –

6

pobierz najnowszą wersję sqlite3.dll z witryny sqlite i zastąp plik sqlite3.dll w katalogu python.

+0

+1000 (gdybym mógł). To właśnie zaktualizowało moją instalację python 2.6 do sqlite 3.7.17 (x86) http://www.sqlite.org/download.html – Barton

+0

Działa również z pythonem 2.7 –

Powiązane problemy