Невозможно импортировать sqlite3 в Python3

Я не могу импортировать модуль sqlite3 в Python версии 3.5.0. Вот что я получаю:

>>> import sqlite3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.5/sqlite3/__init__.py", line 23, in <module>
    from sqlite3.dbapi2 import *
  File "/usr/local/lib/python3.5/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ImportError: No module named '_sqlite3'

Я знаю, я знаю, что есть МНОЖЕСТВО сообщений StackOverflow и форумов поддержки в Интернете, где люди жалуются на эту проблему, но ни одно из опубликованных решений пока не помогло мне. Вот где я был:

  1. У меня также установлен Python 2.6.6 на этом сервере, на котором работает CentOS 6.8 x86_64. Я могу открыть Python REPL и легко импортировать sqlite3 при использовании Python 2.6.6. Я также могу использовать sqlite3 прямо из bash, и ничего не кажется неправильным.

  2. Этот полезный вопрос выглядел многообещающим. Я попытался переконфигурировать и перекомпилировать Python3.5 с опцией --enable-loadable-sqlite-extensions, как предложил пользователь jammyWolf. Нет, такая же ошибка все еще возникает.

  3. Я как хороший мальчик использую виртуальные среды, но у меня есть root-доступ к этому серверу. Итак, я был плохим парнем и запускал python3 как root без активации виртуальных машин. По-прежнему не повезло. Так что я не думаю, что это имеет какое-то отношение к разрешениям.

  4. Я заметил, что в сообщении об ошибке написано No module named '_sqlite3'. Эта ветка предполагает, что подчеркивание перед именем модуля означает, что модуль является деталью реализации и не отображается в API. ... Я не уверен, что делать с этой информацией, но где-то здесь может быть намек.

Любые идеи?


person fterdal    schedule 07.10.2016    source источник
comment
sqlite3 - это код Python; _sqlite3 - это код C. Исходный Python вашего дистрибутива уже должен был включать библиотеку SQLite. Вы сами компилировали 3.5?   -  person CL.    schedule 07.10.2016
comment
Да, я сам скомпилировал Python 3.5. Если я попытаюсь перекомпилировать его, есть ли какой-то конкретный флаг или что-то, о чем я должен знать? (Кроме того, я понятия не имел, что _sqlite3 был кодом C; спасибо за это!)   -  person fterdal    schedule 08.10.2016
comment
А для вашего дистрибутива нет какого-нибудь пакета 3.5? Во всяком случае, ваш вопрос на самом деле заключается в том, как правильно скомпилировать Python; отредактируйте это.   -  person CL.    schedule 08.10.2016
comment
@CL., Установка пакета python может установить пакет библиотеки sqlite (.so) в качестве зависимости, но не заголовок, библиотеку (.h, .a, ..., включенную в пакет разработки sqlite), которая требуется при компиляции модуля расширения python .   -  person falsetru    schedule 08.10.2016
comment
Может быть интересно, что на ubuntu можно установить sqlite-devel с помощью: sudo apt-get install libsqlite3-dev. Конфигурация компиляции python такая же (./configure --enable-loadable-sqlite-extensions).   -  person Alexander    schedule 15.06.2017


Ответы (3)


Falsetru прав, я собираюсь рассказать немного подробнее для тех, кто не знаком (инструкции для Linux). Если вы получаете эту ошибку, скорее всего, вы используете версию python, которая была скомпилирована без правильных заголовков. Вот пошаговое руководство, чтобы разобраться. (Инструкции Python 3.X.X)

  1. Установите необходимые библиотеки sqlite
   sudo apt-get install libsqlite3-dev 
  1. Удалите python (в этом руководстве я использую python 3.6.5 в качестве примера)
   sudo apt-get remove python3.6
  1. Загрузить python из исходников
   cd /tmp && wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
  1. Распаковать архив
   tar -xvf Python-3.6.5.tgz
  1. Настроить
   cd Python-3.6.5 && ./configure
  1. Сделайте и установите (и делайте кофе, пока вы на нем)
   make && sudo make install

Если вы все сделали правильно, запустив "python3.6 -V", вы получите вашу версию python. Обратите внимание, что вам также придется перестроить любые виртуальные среды, которые у вас есть.

И последнее предостережение, с которым вы можете столкнуться.

zipimport.ZipImportError: can't decompress data; zlib not available

Это происходит, если у вас не установлена ​​следующая библиотека zlib:

sudo apt-get install zlib1g-dev
person Lance    schedule 14.04.2018

Установите пакет sqlite-devel, который включает заголовок, библиотеку, необходимую для сборки sqlite3 расширения.

yum install sqlite-devel

ПРИМЕЧАНИЕ. Python включает не саму sqlite3 библиотеку, а модуль расширения (оболочку).

person falsetru    schedule 07.10.2016
comment
Ах, я должен был упомянуть, что пробовал это. Я получаю No package sqlite-devel available. - person fterdal; 07.10.2016
comment
@fterdal, попробуй yum list | grep sqlite | grep dev. В нем будет указан пакет разработки sqlite; затем установите этот пакет вместо sqlite-devel. - person falsetru; 08.10.2016
comment
У Python есть собственная копия библиотеки SQLite; отдельный пакет не нужен. - person CL.; 08.10.2016
comment
@CL., Вы это имеете в виду? hg.python.org/cpython/file/tip/Modules/_sqlite Это не сама библиотека sqlite3, а расширение python, использующее библиотеку sqlite3. - person falsetru; 08.10.2016

Я скопировал sqlite3.dll в эту папку:

C:\Users\*****\Anaconda3\DLLs

Это сработало через две недели, когда попробовали все остальное.

person ricardo rechi    schedule 02.06.2021