Aucun module nommé _sqlite3

136

J'essaie d'exécuter une application Django sur mon VPS exécutant Debian 5. Lorsque j'exécute une application de démonstration, elle revient avec cette erreur:

  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

En regardant l'installation de Python, cela donne la même erreur:

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

En lisant sur le Web, j'apprends que Python 2.5 devrait être livré avec tous les wrappers SQLite nécessaires inclus. Dois-je réinstaller Python ou existe-t-il un autre moyen de faire fonctionner ce module?

Alexander van Dijk
la source
1
Le même problème est pour python 3.5.5 compilé à partir des sources
Alex-Bogdanov

Réponses:

134

Il semble que votre makefile n'incluait pas le .sofichier approprié . Vous pouvez corriger ce problème en suivant les étapes ci-dessous:

  1. Installer sqlite-devel(ou libsqlite3-devsur certains systèmes basés sur Debian)
  2. Reconfigurez et recompilé Python avec ./configure --enable-loadable-sqlite-extensions && make && sudo make install

Remarque

La sudo make installpartie définira cette version de python comme la norme à l'échelle du système, ce qui peut avoir des conséquences imprévues. Si vous exécutez cette commande sur votre poste de travail, vous voudrez probablement l'installer avec le python existant, ce qui peut être fait avec sudo make altinstall.

jammyWolf
la source
Merci jammyWolf. Je ne pense pas que j'ai "perdu" le fichier après la première fois que j'ai exécuté configure, plutôt que le fait d'exécuter configure avec sqlite-devel déjà installé a fait toute cette différence.
Jeff Taylor
4
Comment puis-je installer sqlite-devel? Je suis sur un system.I Linux personnalisé juste téléchargé sqlite-autoconf-3100200.tar.gzet exécuter ./configure, make && make install. Après avoir recompilé python3, cela ne fonctionne toujours pas.
AntiMoron
2
Pour toute personne lisant ceci, assurez-vous d'ajouter l'option de configuration dans la réponse. C'est ce qui m'a sauvé aussi. Sinon, peu importe que vous ayez installé libsqlite3-dev.
ticster le
3
comment vérifier où se trouve le script de configuration?
Jenna Kwon
1
aucune de ces solutions (ref: toutes sur cette page) ne fonctionne pour amazon linux avec python 3.8.0
bgenchel
80

J'ai eu le même problème (construction à python2.5partir des sources sur Ubuntu Lucid), et j'ai import sqlite3jeté cette même exception. J'ai installé à libsqlite3-devpartir du gestionnaire de packages, recompilé python2.5, puis l'importation a fonctionné.

Emilien
la source
6
Exactement! Vous n'avez pas à manipuler manuellement avec les fichiers binaires et l'environnement. Dans mon cas, j'avais déjà Python 2.7 construit à partir des sources, donc, pour réduire la compilation, j'ai exécuté apt-get install libsqlite3-dev; ./configure; make libinstall; make sharedinstall;
oxfn
38

J'ai eu le même problème avec Python 3.5 sur Ubuntu lors de l'utilisation de pyenv .

Si vous installez python à l'aide de pyenv , il est répertorié comme l'un des problèmes de construction courants . Pour le résoudre, supprimez la version python installée, installez la configuration requise (pour ce cas particulier libsqlite3-dev), puis réinstallez la version python.

Petite instance
la source
22

C'est ce que j'ai fait pour le faire fonctionner.

J'utilise pythonbrew (qui utilise pip) avec python 2.7.5 installé.

J'ai d'abord fait ce que Zubair (ci-dessus) a dit et j'ai exécuté cette commande:

sudo apt-get install libsqlite3-dev

Ensuite, j'ai exécuté cette commande:

pip install pysqlite

Cela a résolu le problème de la base de données et j'ai eu la confirmation de cela lorsque j'ai couru:

python manager.py syncdb
Joe
la source
2
dans Centos 6.5 exécutez yum install sqlite-develau lieu de la première ligne.
Ehsan88
3
C'est bon pour Python 2, mais pysqlitec'est maintenant sqlite3dans Python 3, et vous ne pouvez pas pip -m installcela.
clabe45
5
pysqlite is not supported on Python 3. When using Python 3, use the sqlite3 module from the standard library
stephen
19
  1. Installez le sqlite-develpackage:

    yum install sqlite-devel -y

  2. Recompilez python à partir de la source:

    ./configure
    make
    make altinstall
John Zhang
la source
10

Mon _sqlite3.so est dans /usr/lib/python2.5/lib-dynload/_sqlite3.so. À en juger par vos chemins, vous devriez avoir le fichier /usr/local/lib/python2.5/lib-dynload/_sqlite3.so.

Essayez ce qui suit:

find /usr/local -name _sqlite3.so

Si le fichier n'est pas trouvé, il se peut qu'il y ait un problème avec votre installation Python. Si c'est le cas, assurez-vous que le chemin sur lequel il est installé se trouve dans le chemin Python. Dans le shell Python,

import sys
print sys.path

Dans mon cas, /usr/lib/python2.5/lib-dynload est dans la liste, il est donc capable de trouver /usr/lib/python2.5/lib-dynload/_sqlite3.so.

Glenn Maynard
la source
2
juste vérifié. le chemin est là, mais _sqlite3.so est effectivement manquant. Des suggestions pour savoir si je peux l'installer séparément ou mieux pour réinstaller Python? THX!
Alexander van Dijk
2
Il semble que vous ayez construit et installé Python manuellement (les packages de votre système d'exploitation sont-ils trop anciens?), Car il se trouve dans / usr / local. Assurez-vous que le package de développement sqlite est installé (libsqlite3-dev dans les distributions actuelles, peut-être pas dans la vôtre), sinon Python ne pourra pas construire le module. Si vous l'installez, vous devrez reconstruire Python pour qu'il inclue ce module.
Glenn Maynard
Hmm, j'ai installé libsqlite3-dev et reconstruit python, mais maintenant j'obtiens une erreur: ImportError: ./_sqlite3.so: symbole non défini: PyUnicodeUCS4_DecodeUTF8
Alexander van Dijk
Je suis confus. Votre distribution a déjà Python 2.5 ( packages.debian.org/lenny/python2.5 ). Pourquoi le construisez-vous vous-même?
Glenn Maynard
1
Mais vous exécutez Python à partir de / usr / local. Il semble que vous ayez installé Python deux fois - une fois vous-même et une fois avec apt-get, et celui de / usr / local est cassé.
Glenn Maynard
8

J'ai récemment essayé d'installer python 2.6.7 sur mon bureau Ubuntu 11.04 pour certains travaux de développement. Je suis tombé sur des problèmes similaires à ce fil. J'ai réussi à le réparer en:

  1. Ajustement du fichier setup.py pour inclure le chemin de développement sqlite correct. Extrait de code de 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/'
    ]

    Avec le bit que j'ai ajouté étant '/ usr / lib / x86_64-linux-gnu /'.

  2. Après avoir exécuté make, je n'ai reçu aucun avertissement indiquant que le support de sqlite n'était pas construit (c'est-à-dire qu'il était correctement construit: P), mais après l'exécution make install, sqlite3 n'a toujours pas importé avec le même " ImportError: No module named _sqlite3" whe running "import sqlite3".

    Donc, la bibliothèque a été compilée, mais pas déplacée vers le chemin d'installation correct, j'ai donc copié le .sofichier ( 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/- ce sont mes chemins de construction, vous devrez probablement les ajuster à votre configuration).

Voila! La prise en charge de SQLite3 fonctionne désormais.

foomip
la source
Je vous remercie! Juste la première partie était nécessaire pour Linux Mint Debian Edition, 2014
spookylukey
Je vous remercie! Exactement le même problème pour moi. La bibliothèque est construite mais pas copiée dans le bon répertoire.
Student222
8

J'ai trouvé que beaucoup de gens rencontraient ce problème car le Python multi-version, sur mon propre vps (cent os 7 x64), je l'ai résolu de cette façon:

  1. Recherchez le fichier "_sqlite3.so"

    find / -name _sqlite3.so

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

  2. Trouvez le répertoire de la bibliothèque standard python que vous souhaitez utiliser,

    pour moi /usr/local/lib/python3.6/lib-dynload

  3. Copiez le fichier:

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

Enfin, tout ira bien.

Ehco
la source
6
Cela n'a pas fonctionné pour moi. Got ImportError: dynamic module does not define module export function (PyInit__sqlite3)sur CentOS 7.
xtluo
même pour moi, est-ce que py2 .sone peut pas être utilisé pour py3.6.4? @xtluo
MeadowMuffins
J'ai eu cette erreur à la place -ImportError: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
bgenchel
7

mon python est construit à partir de la source, la cause manque d'options lors de la configuration de la version de python par exec : 3.7.4

./configure --enable-loadable-sqlite-extensions --enable-optimizations
make
make install

fixé

Robin
la source
6

Cela a fonctionné pour moi dans Redhat Centos 6.5:

yum install sqlite-devel
pip install pysqlite
Ehsan88
la source
1
juste pour info, je n'avais pas besoin de faire l'étape pip
HashRocketSyntax
3

J'ai le problème dans FreeBSD 8.1:

- No module named _sqlite3 -

Il est résolu en tenant le port ----------

/usr/ports/databases/py-sqlite3

après celui-ci on peut voir:

OK ----------
'>>>' import sqlite3 -----
'>>>' sqlite3.apilevel -----
'2.0'
George
la source
14
Cette réponse n'a pas de sens. Pouvez-vous le réviser?
Tim Post
J'ai eu le même problème, FreeBSD 8.2 avec Py2.7.2. Résolu en exécutant à nouveau make / install pour py-sqlite3.
Justin
vous devez faire une désinstallation s'il semble installé au début. freebsd 10.2
Kunthar
2

Le package python-pysqlite2 est-il installé?

sudo apt-get install python-pysqlite2
Bryan
la source
1
sqlite est installé avec Python; vous n'avez pas besoin d'installer un package séparé pour cela, et nous pouvons dire qu'il dispose déjà de la bibliothèque fournie par Python. L'installation de python-sqlite serait au mieux déroutante.
Glenn Maynard
Crampe cérébrale. Je voulais dire le package python-pysqlite2. Je ne pourrais pas faire fonctionner Django / sqlite sur Lenny sans ce package. J'ai mis à jour ma réponse.
bryan
J'ai installé python-pysqlite2.
Alexander van Dijk
2

Vérification de votre fichier settings.py. N'avez-vous pas simplement écrit "sqlite" au lieu de "sqlite3" pour le moteur de base de données?

moi-même
la source
2

sqlite3livré avec Python. J'ai également eu le même problème, je viens de le désinstaller python3.6et de l'installer à nouveau.

Désinstaller python existant:

sudo apt-get remove --purge python3.6

Installez python3.6:

sudo apt install build-essential checkinstall
sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
tar xvf Python-3.6.0.tar.xz
cd Python-3.6.0/
./configure
sudo make altinstall
Mastan Basha Shaik
la source
1

vous devez être dans centos ou redhat et compiler python vous-même , c'est le bogue de python, faites-le dans votre répertoire de code source python et faites-le ci-dessous

curl -sk https://gist.github.com/msabramo/2727063/raw/59ea097a1f4c6f114c32f7743308a061698b17fd/gistfile1.diff | patch -p1
Wolfkdy
la source
1

J'ai eu le même problème, rien n'a fonctionné pour moi à partir des ans ci-dessus mais maintenant je l'ai résolu par

il suffit de retirer python.pipet sqlite3et réinstallent

  1. sudo apt-get remove python.pip
  2. sudo apt-get remove sqlite3

maintenant installez-le à nouveau

  1. sudo apt-get install python.pip
  2. sudo apt-get install sqlite3

dans mon cas, lors de l'installation à sqlite3nouveau, il a montré une erreur, puis j'ai tapé

  1. sqlite3

sur le terminal pour vérifier s'il a été retiré ou non et il a commencé à le déballer

une fois le sqlite3terminal installé, lancez et écrivez

  1. sqlite3
  2. database.db (pour créer une base de données)

Je suis sûr que cela vous aidera certainement

tosky
la source
1

Réponse pour toute personne qui atterrit sur cette page à la recherche d'une solution pour Windows OS:

Vous devez installer pysqlite3 ou db-sqlite3 s'il n'est pas déjà installé. vous pouvez utiliser ce qui suit pour installer.

  • pip installer pysqlite3
  • pip installer db-sqlite3

Pour moi, le problème était avec le fichier DLL de sqlite3.

Solution:

  1. J'ai pris le fichier DLL du site sqlite . Cela peut varier en fonction de votre version de l'installation de python.

  2. Je l'ai collé dans le répertoire DLL de l'env. pour moi, c'était "C: \ Anaconda \ Lib \ DLLs", mais vérifiez le vôtre. Avant et après avoir placé le fichier DLL

Ikhurana
la source
J'ai eu l'erreur exacte. Cela a en quelque sorte résolu mon problème. Merci!
uqji
1

J'ai été déçu que ce problème existe encore jusqu'à aujourd'hui. Comme j'ai récemment essayé d'installer vCD CLI sur CentOS 8.1 et j'ai été accueilli avec la même erreur lorsque j'ai essayé de l'exécuter. La façon dont j'ai dû le résoudre dans mon cas est la suivante:

  • Installez SQLite3 à partir de zéro avec le préfixe approprié
  • Faire nettoyer mon installation Python
  • Exécutez Make install pour réinstaller Python

Comme je l'ai fait pour créer un article de blog différent sur la façon d'installer vCD CLI et VMware Container Service Extension. J'ai fini par capturer les étapes que j'ai utilisées pour résoudre le problème et les mettre dans un article de blog séparé à l'adresse:

http://www.virtualizationteam.com/cloud/running-vcd-cli-fail-with-the-following-error-modulenotfounderror-no-module-named-_sqlite3.html

J'espère que cela sera utile, car si les conseils ci-dessus m'ont aidé à trouver une solution, j'ai dû en combiner quelques-uns et les modifier un peu.

Eiad Al-Aqqad
la source
Merci d'avoir révélé votre affiliation avec le lien que vous fournissez! C'est apprécié.
Robert Columbia
-1

Téléchargez sqlite3:

wget http://www.sqlite.org/2016/sqlite-autoconf-3150000.tar.gz

Suivez ces étapes pour installer:

$tar xvfz sqlite-autoconf-3071502.tar.gz
$cd sqlite-autoconf-3071502
$./configure --prefix=/usr/local
$make install
Narendra Kumar
la source
1
Cette question a été posée en 2009 et concernait Debian 5. sqlite3 est maintenant disponible dans les dépôts (depuis Wheezy) donc il n'est pas nécessaire de l'installer manuellement. Je suppose que cela est également vrai pour la plupart des distributions.
Jérôme
-3

Vous devez installer pysqlite dans votre environnement python:

    $ pip install pysqlite
Darwin M.
la source
-3

Essayez de copier _sqlite3.sopour que Python puisse le trouver.

Cela devrait être aussi simple que:

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

Croyez-moi, essayez-le.

sen john
la source