Нет модуля с именем _sqlite3 - PullRequest
98 голосов
/ 31 июля 2009

Я пытаюсь запустить приложение Django на моем VPS под управлением Debian 5. Когда я запускаю демонстрационное приложение, оно возвращается с этой ошибкой:

  File "/usr/local/lib/python2.5/site-packages/django/utils/importlib.py", line 35, in     import_module
    __import__(name)

  File "/usr/local/lib/python2.5/site-packages/django/db/backends/sqlite3/base.py", line 30, in <module>
    raise ImproperlyConfigured, "Error loading %s: %s" % (module, exc)

ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that     order): No module named _sqlite3

Глядя на установку Python, выдает ту же ошибку:

Python 2.5.2 (r252:60911, May 12 2009, 07:46:31) 
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.5/sqlite3/__init__.py", line 24, in <module>
    from dbapi2 import *
  File "/usr/local/lib/python2.5/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ImportError: No module named _sqlite3
>>>

Читая в Интернете, я узнал, что Python 2.5 должен поставляться со всеми необходимыми оболочками SQLite . Нужно ли переустанавливать Python или есть другой способ запустить этот модуль?

Ответы [ 18 ]

78 голосов
/ 27 июня 2014

Похоже, ваш make-файл не содержит соответствующего .so файла. Вы можете исправить эту проблему с помощью следующих шагов:

  1. Установить sqlite-devel (или libsqlite3-dev в некоторых системах на основе Debian)
  2. Переконфигурируйте и перекомпилируйте Python с ./configure --enable-loadable-sqlite-extensions && make && sudo make install

Примечание

Часть sudo make install установит версию Python как общесистемный стандарт, что может иметь непредвиденные последствия. Если вы запустите эту команду на своей рабочей станции, вы, вероятно, захотите установить ее вместе с существующего питона, что можно сделать с помощью sudo make altinstall.

75 голосов
/ 30 апреля 2010

У меня была такая же проблема (сборка python2.5 из исходного кода в Ubuntu Lucid), и import sqlite3 выдал это же исключение Я установил libsqlite3-dev из диспетчера пакетов, перекомпилировал python2.5, и затем импорт сработал.

18 голосов
/ 09 августа 2016

У меня была такая же проблема с Python 3.5 в Ubuntu при использовании pyenv .

Если вы устанавливаете python с использованием pyenv , он указан как одна из общих проблем сборки . Чтобы решить эту проблему, удалите установленную версию Python, установите требования (для данного конкретного случая libsqlite3-dev), затем переустановите версию Python.

17 голосов
/ 03 ноября 2013

Это то, что я сделал, чтобы заставить его работать.

Я использую pythonbrew (который использует pip) с установленным python 2.7.5.

Сначала я сделал то, что сказал Зубаир (см. Выше), и выполнил эту команду:

sudo apt-get install libsqlite3-dev

Затем я запустил эту команду:

pip install pysqlite

Это исправило проблему с базой данных, и я получил подтверждение, когда запустил:

python manager.py syncdb
12 голосов
/ 07 декабря 2015
  1. Установите пакет sqlite-devel:

    yum install sqlite-devel -y

  2. Перекомпилируйте питон из источника:

    ./configure
    make
    make altinstall
    
9 голосов
/ 31 июля 2009

Мой _sqlite3.so находится в /usr/lib/python2.5/lib-dynload/_sqlite3.so. Судя по вашим путям, у вас должен быть файл /usr/local/lib/python2.5/lib-dynload/_sqlite3.so.

Попробуйте следующее:

find /usr/local -name _sqlite3.so

Если файл не найден, возможно, что-то не так с вашей установкой Python. Если это так, убедитесь, что путь, по которому он установлен, находится в пути Python. В оболочке Python

import sys
print sys.path

В моем случае /usr/lib/python2.5/lib-dynload находится в списке, поэтому он может найти /usr/lib/python2.5/lib-dynload/_sqlite3.so.

7 голосов
/ 18 апреля 2017

Я обнаружил, что многие люди сталкиваются с этой проблемой, потому что Multi-версия Python, на моем собственном vps (cent os 7 x64) я решил это следующим образом:

  1. Найдите файл "_sqlite3.so"

    find / -name _sqlite3.so
    

    out: /usr/lib64/python2.7/lib-dynload/_sqlite3.so

  2. Найдите каталог стандартной библиотеки Python, который вы хотите использовать,

    для меня /usr/local/lib/python3.6/lib-dynload

  3. Скопировать файл:

    cp   /usr/lib64/python2.7/lib-dynload/_sqlite3.so /usr/local/lib/python3.6/lib-dynload
    

Наконец-то все будет хорошо.

7 голосов
/ 16 июля 2011

Недавно я попытался установить python 2.6.7 на свой рабочий стол Ubuntu 11.04 для некоторых разработок. Наткнулся на похожие проблемы в этой теме. Я испортил это:

  1. Настройка файла setup.py для включения правильного пути к sqlite dev. Фрагмент кода из setup.py:

    def sqlite_incdir:
    sqlite_dirs_to_check = [
    os.path.join(sqlite_incdir, '..', 'lib64'),
    os.path.join(sqlite_incdir, '..', 'lib'),
    os.path.join(sqlite_incdir, '..', '..', 'lib64'),
    os.path.join(sqlite_incdir, '..', '..', 'lib'),
    '/usr/lib/x86_64-linux-gnu/'
    ]
    

    С битом, который я добавил, был '/usr/lib/x86_64-linux-gnu/'.

  2. После запуска make я не получил никаких предупреждений о том, что поддержка sqlite не была собрана (т. Е. Правильно скомпилирована: P), но после запуска make install sqlite3 все еще не импортировал с тем же "ImportError: No module named _sqlite3" whe running "import sqlite3».

    Итак, библиотека была скомпилирована, но не перемещена по правильному пути установки, поэтому я скопировал файл .so (cp /usr/src/python/Python-2.6.7/build/lib.linux-x86_64-2.6/_sqlite3.so /usr/local/python-2.6.7/lib/python2.6/sqlite3/ - это мои пути сборки, вам, вероятно, потребуется настроить их в соответствии с вашими настройками).

Вуаля! Поддержка SQLite3 теперь работает.

5 голосов
/ 16 августа 2014

Это сработало для меня в Redhat Centos 6.5:

yum install sqlite-devel
pip install pysqlite
2 голосов
/ 30 августа 2011

У меня проблема во FreeBSD 8.1:

- No module named _sqlite3 -

Решается стой порт ----------

/usr/ports/databases/py-sqlite3

после этого можно увидеть:

OK ----------
'>>>' import sqlite3 -----
'>>>' sqlite3.apilevel -----
'2.0'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...