2014-10-13 4 views
5

Я хотел бы использовать SQLite версии 3.8 с Python, но модуль SQLite3 использует устаревшую версию. Я установил SQLite версии 3.8.4.3 на свой Mac, но sqlite3.sqlite_version все равно возвращает 3.7.13.Как обновить версию SQLite, используемую модулем SQLite3 Python на Mac?

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

Спасибо!

+0

Как вы установили SQLite 3.8.4.3? Двоичный установщик из sqlite.org, Homebrew, проверьте и постройте источник, ...? – abarnert

+0

Я считаю, что я пробовал все это. Будет ли убедиться, что новая версия используется пакетом python? –

+0

Нет, никто из них не будет уверен, не делая ничего дополнительного. Но никто не может рассказать вам, как продолжать дальше, не зная, что вы сделали. (И там, где закончились библиотеки, и как выглядит ваш 'PATH' и т. Д.) – abarnert

ответ

1

Из ваших комментариев, ваша проблема в том, что ваш предварительно установленном SQLite 3,7 поставляется выше на вашем пути, чем сторонние 3.8. Это означает, что когда вы строите pysqlite2, по умолчанию он найдет и использует 3,7, так что это не принесет вам пользы. И вы, вероятно, не хотите меняться по всему пути, чтобы справиться с этим.

Но это нормально, если 3.8 находится во время сборки, неважно, что на первом месте во время выполнения; путь к 3.8 будет запекаться в модуль. Есть несколько способов сделать это, но самое простое что-то вроде этого:

$ brew install sqlite3 
$ sudo -s 
# LDFLAGS=-L/usr/local/opt/sqlite/lib CPPFLAGS=-I/usr/local/opt/sqlite/include pip2.7 install pysqlite 
# ^D 
$ python 
>>> import sqlite3 
>>> sqlite3.sqlite_version 
'3.7.13' 
>>> import pysqlite2.dbapi2 
>>> pysqlite2.dbapi2.sqlite_version 
'3.8.6' 

В LDFLAGS и CPPFLAGS переменных пришел на выходе brew install sqlite3 шага. Если вы установили sqlite3 каким-либо другим способом, вам нужно будет получить соответствующие значения - возможно, /usr/local/lib и /usr/local/include, но если нет, найдите libsqlite3.dylib и sqlite3.h.

Обратите внимание, что если вы будете следовать точно эти шаги, вы получите версию обезжиренного из libsqlite3, что означает, что pysqlite2 не будет работать в 32-битном режиме. Я сомневаюсь, что это проблема для вас, но если это так, вы можете просто установить его --universal или использовать другой установщик вместо Homebrew.

0

Я думаю, что самый простой способ - обновить свой Python до последней версии, потому что sqlite3 поставляется с Python.

В противном случае необходимо обновить пакет pysqlite. В Linux есть предварительно скомпилированный пакет python-sqlite.

Вы можете сделать это с помощью easy_install. Для создания этого пакета вам нужны пакеты. Несвободно построить pysqlite с новой установленной версией sqlite3, в вашем случае 3.8.4.3.

sudo easy_install pysqlite 

или

sudo pip install --upgrade pysqlite 
+0

Я пробовал это, но не повезло. Нужно ли что-то сделать, чтобы новая установка пакета pysqlite была построена с использованием новой версии sqlite3? –

+0

Вы должны быть уверены, что ваша простая команда sqlite добавляет новую. В выводе здания может быть намек, какая версия была использована. Я нашел аналогичный [вопрос] (https://stackoverflow.com/questions/10984403/how-to-update-python-sqlite-on-mac-osx). – wenzul

+1

'easy_install' (a) устарел и (b) требует' setuptools' столько же, сколько 'pip' (на самом деле, это часть' setuptools'), поэтому вы действительно не должны рекомендовать его. – abarnert

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