как обновить sqlite3 на python до последней версии sqlite3 [duplicate]

Чтобы добавить к другим вопросам, позвольте мне представить, как я это сделал с помощью функции Python 2.0 с помощью Numpy:

def one_hot(y_):
    # Function to encode output labels from number indexes 
    # e.g.: [[5], [0], [3]] --> [[0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0]]

    y_ = y_.reshape(len(y_))
    n_values = np.max(y_) + 1
    return np.eye(n_values)[np.array(y_, dtype=np.int32)]  # Returns FLOATS

Строка n_values = np.max(y_) + 1 может быть жестко закодирована для вас, чтобы использовать хорошую количество нейронов, если вы используете мини-партии, например.

Демо-проект / учебник, в котором эта функция использовалась: https://github.com/guillaume-chevalier/LSTM-Human-Activity-Recognition

29
задан JeromeJ 8 September 2013 в 21:50
поделиться

4 ответа

Поддержка

sqlite3 в Python может быть немного запутанной. Адаптер базы данных sqlite начинался как отдельный проект pysqlite2 , но для Python 2.5 его версия была включена в стандартную библиотеку Python под именем sqlite3 . Оригинальный адаптер продолжает разрабатываться как отдельный проект, периодически обновляя версию в Python, чтобы соответствовать ей. Если вы пытаетесь использовать более новую версию адаптера, она обычно устанавливается как pysqlite2, чтобы не противоречить версии, включенной в стандартную библиотеку. И, в зависимости от того, как он был построен, он может ссылаться на другую версию базовой библиотеки sqlite3 database . Поэтому убедитесь, что вы импортируете его правильно:

>>> import sqlite3
>>> sqlite3.version_info
(2, 4, 1)
>>> sqlite3.sqlite_version_info
(3, 6, 11)

>>> from pysqlite2 import dbapi2 as sqlite3
>>> sqlite3.version_info
(2, 5, 5)
>>> sqlite3.sqlite_version_info
(3, 6, 18)

version_info - это версия адаптера базы данных sqlite3 (pysqlite2 или встроенного sqlite3). sqlite_version_info - это версия базовой библиотеки базы данных sqlite3.

Рекомендуется использовать from ... import ... as sqlite3, чтобы остальная часть вашего кода не изменялась, если вы переходите от одной версии к другой.

Примечание. enable_load_extension впервые появился в pysqlite2 2.5.0.

EDIT: enable_load_extension отключен по умолчанию при создании адаптера , Чтобы включить его, вы можете создать pysqlite2 вручную. Следующий рецепт предполагает систему unix -y и самую последнюю версию pysqlite2, которая на момент написания этой статьи составляет 2.5.5.

Во-первых, если вы первоначально установили адаптер через easy_install удалите его, выполнив первый запуск:

$ sudo /path/to/easy_install -m pysqlite # or whatever package name you first used

Будет выведен какой-то вывод, включая строки, такие как:

Removing pysqlite 2.5.5 from easy-install.pth file

Using /path/to/site-packages/pysqlite-2.5.5-py2.x-something.egg

Удалите яйцо, используя указанное имя файла (имя будет меняться в зависимости от вашей платформы и версии, и может ссылаться на файл или каталог):

$ sudo rm -r /path/to/site-packages/pysqlite-2.5.5-py2.x-something.egg

Теперь загрузите и извлеките исходный архив pysqlite-2.5.5:

$ mkdir /tmp/build
$ cd /tmp/build
$ curl http://oss.itsystementwicklung.de/download/pysqlite/2.5/2.5.5/pysqlite-2.5.5.tar.gz | tar xz
$ cd pysqlite-2.5.5

Затем отредактируйте файл setup.cfg, чтобы прокомментировать директиву SQLITE_OMIT_LOAD_EXTENSION:

$ ed setup.cfg <<EOF
> /SQLITE_OMIT_LOAD_EXTENSION/s/define=/#define=/
> w
> q
> EOF

Поскольку версия sqlite3 настолько старая (3.4.0), вы также должны построить с последним sqlite3 ] библиотека. Это облегчено в сценарии pysqlite2 setup.py:

$ /path/to/python2.x setup.py build_static

Это автоматически загрузит последний источник сборки sqlite3 и построит адаптер вместе с -date статически связанную версию sqlite3.

UPDATE (2015/07/21): В соответствии с последним pysqlite 2.6.3 commit вам нужно загрузить исходный код sqlite на (g19) Теперь установите адаптер:

$ sudo /path/to/python2.x setup.py install

и запустите тесты:

$ cd     # somewhere out of the build directory
$ /path/to/python2.x
>>> from pysqlite2 import test
>>> test.test()

и, если

В качестве бонуса, если причина, по которой вы хотите поддерживать расширение загрузки, заключается в использовании полнотекстового расширения sqlite3, FTS3, вы должны обнаружить, что это был включен как часть статической библиотеки, и дальнейшая работа не требуется:

>>> from pysqlite2 import dbapi2 as sqlite3
>>> con = sqlite3.connect(":memory:")
>>> con.execute("create virtual table recipe using fts3(name, ingredients)")
<pysqlite2.dbapi2.Cursor object at 0xca5e0>
65
ответ дан bobince 18 August 2018 в 23:34
поделиться
  • 1
    Дорогой Нед: Это, безусловно, очень помогло мне - спасибо! Теперь мой скрипт python, похоже, загружает самую последнюю версию адаптера после использования структуры «from ... import ... as sqlite3», так как я получаю 2.5.5 для версии_info и 3.4.0 для sqlite_version. Тем не менее, в одной строке я пытаюсь использовать «enable_load_extension», и теперь я получаю: AttributeError: объект «pysqlite2.dbapi2.Connection» не имеет атрибута «enable_load_extension». По всей информации, которую вы мне дали, это кажется удивительным, нет? Большое спасибо за вашу помощь до сих пор - очень ценим! --Albert – Albert 11 October 2009 в 21:51
  • 2
    Штопать! Я расширил ответ, чтобы включить способ создания адаптера с поддержкой поддержки расширения загрузки и с обновленной версией библиотеки sqlite3. – Ned Deily 12 October 2009 в 04:29
  • 3
    ЭТО РАБОТАЕТ - ЭТО РАБОТАЕТ - ЭТО РАБОТАЕТ !!! Я очень доволен этим Тедом, спасибо большое! Я не установил последний python. И я даже не выполнил команду chmod, которую вы предложили. Каким-то образом разрешение было сделано за одну ночь. Счастливое удивление сегодня утром. Опять же, спасибо, и это закрывает проблемы. Я уверен, что другие извлекут выгоду из чтения всех ваших полезных советов. Лучший, Альберт – Albert 13 October 2009 в 13:32
  • 4
    Это сработало для меня! (Несмотря на то, что некоторые шаги не удались, и я должен был сделать их вручную) Но только на Python2. Есть ли способ, чтобы он также обновлял Python3? – JeromeJ 9 September 2013 в 12:41
  • 5
    К сожалению, вы не можете включить_load_extension таким образом в Python3, поскольку pysqlite2 предназначен только для Python2. Чтобы включить_load_extension, вам нужно перекомпилировать Python3 с помощью флага configure --enable-loadable-sqlite-extensions. Очень желательно, чтобы pip мог обрабатывать такие настройки в Python2 и Python3, что-то вроде: pip install pysqlite3 --configure-opts = & quot; - enable-loadable-sqlite-extensions & quot; – jgomo3 26 February 2015 в 15:10

Вместо стандартного модуля Python sqlite3 вы можете использовать модуль apsw , сторонний модуль SQLite, который более точно следует за API SQLite. Он включает поддержку для загрузки расширений, а также в основном все, что разрешено в SQLite C / C ++ API. Он также старается как можно больше следить за любыми новыми изменениями в SQLite.

3
ответ дан Brian Minton 18 August 2018 в 23:34
поделиться

Вам нужно посмотреть на свой Python-путь и убедиться, что sqlite, который вы хотите, установлен в более ранней директории, чем встроенный sqlite.

Вы можете увидеть путь с помощью:

import sys
print sys.path

Если вы хотите узнать, откуда находится модуль, попробуйте:

print sqlite3.__file__
3
ответ дан Ned Batchelder 18 August 2018 в 23:34
поделиться
  • 1
    Уважаемый Ned: Это очень полезно - спасибо! Я чувствую, что теперь я намного ближе к тому, чтобы полностью решить проблему после вашего комментария и сообщения, опубликованного Нед Дейли. --Albert – Albert 11 October 2009 в 21:53

У меня есть python 2.7 на машине для Windows, а встроенная sqlite3.sqlite_version - 3.6.x. Выполняя следующие шаги, я смог заставить его использовать sqlite 3.7.9.

  1. Загрузите и распакуйте предварительно скомпилированную двоичную DLL ("sqlite-dll-win32-x86-3070900.zip "на http://www.sqlite.org/download.html )
  2. (вероятно, должен закрыть все экземпляры python в этот момент, чтобы быть в безопасности) Перейти к C: \ Python27 \ DLL и смените имя файла "sqlite3.dll" на "sqlite3.dll.old"
  3. Скопируйте файл "sqlite3.dll" в папку C: \ Python27 \ DLLs
  4. Открыть оболочку python и импортировать sqlite3
  5. Проверить, что sqlite3.sqlite_version отображается как «3.7.9»
14
ответ дан Will Townes 18 August 2018 в 23:34
поделиться
  • 1
    Спасибо, будет. Однако мне интересно, нет ли риска несовместимости между новым sqlite3.dll и python 2.7.? Код пакета sqlite3. Я предполагаю, что пакет sqlite3 был протестирован против конкретного sqlite3.dll, и его API может развиваться со временем. Возможно, вам просто повезло с этими конкретными версиями и сценариями тестирования ... Или есть набор тестов? – dim 9 July 2013 в 13:13
  • 2
    Привет, Дим, я не проводил никаких испытаний, так что, возможно, мне просто повезло! – Will Townes 9 July 2013 в 16:09
  • 3
    Работала хорошо для меня. – Alon Lavi 1 October 2014 в 18:57
  • 4
    Кажется, тоже работает для меня. Я пошел с 3.6.21 до 3.8.8.2, что составляет 5 лет обновлений. – GravityWell 6 February 2015 в 02:26
Другие вопросы по тегам:

Похожие вопросы: