Nessun modulo chiamato _sqlite3


136

Sto cercando di eseguire un'app Django sul mio VPS con Debian 5. Quando eseguo un'app demo, viene visualizzato l'errore seguente:

  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

Guardando l'installazione di Python, dà lo stesso errore:

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

Leggendo sul web, apprendo che Python 2.5 dovrebbe includere tutti i wrapper SQLite necessari inclusi. Devo reinstallare Python o c'è un altro modo per mettere in funzione questo modulo?


1
Lo stesso problema è per Python 3.5.5 compilato dalla fonte
Alex-Bogdanov,

Risposte:


134

Sembra che il tuo makefile non includesse il .sofile appropriato . È possibile correggere questo problema con i passaggi seguenti:

  1. Installa sqlite-devel(o libsqlite3-devsu alcuni sistemi basati su Debian)
  2. Riconfigurare e ricompilare Python con ./configure --enable-loadable-sqlite-extensions && make && sudo make install

Nota

La sudo make installparte imposterà quella versione di Python come standard a livello di sistema, che può avere conseguenze impreviste. Se esegui questo comando sulla tua workstation, probabilmente vorrai averlo installato insieme al python esistente, che può essere fatto con sudo make altinstall.


Grazie Jammy Wolf. Non credo di aver "perso" il file dopo la prima volta che ho eseguito configure, piuttosto che l'esecuzione di configure con sqlite-devel già installato ha fatto tutta questa differenza.
Jeff Taylor,

4
Come posso installare sqlite-devel? Sono su un linux system.I personalizzato appena scaricato sqlite-autoconf-3100200.tar.gzed eseguire ./configure, make && make install. Dopo aver ricompilato python3 non funziona ancora.
AntiMoron,

2
Per chiunque legga questo, assicurati di aggiungere l'opzione di configurazione nella risposta. Questo è ciò che mi ha salvato anche. Altrimenti non importa che tu abbia installato libsqlite3-dev.
ticster,

3
come posso verificare dove si trova lo script di configurazione?
Jenna Kwon il

1
nessuna di queste soluzioni (rif: tutte in questa pagina) funziona con Amazon Linux con Python 3.8.0
bgenchel

80

Ho avuto lo stesso problema (compilando python2.5dalla fonte su Ubuntu Lucid) e ho import sqlite3lanciato questa stessa eccezione. Ho installato libsqlite3-devdal gestore pacchetti, ricompilato python2.5 e quindi l'importazione ha funzionato.


6
Esattamente! Non è necessario manipolare manualmente con file binari e ambiente. Nel mio caso avevo già creato Python 2.7 dal sorgente, quindi per minimizzare la compilazione ho eseguito apt-get install libsqlite3-dev; ./configure; fare libinstall; rendere sharedinstall;
oxfn,

38

Ho avuto lo stesso problema con Python 3.5 su Ubuntu durante l'utilizzo di Pyenv .

Se stai installando Python usando pyenv , è elencato come uno dei problemi di compilazione più comuni . Per risolverlo, rimuovere la versione di Python installata, installare i requisiti (per questo caso particolare libsqlite3-dev), quindi reinstallare la versione di Python.


22

Questo è quello che ho fatto per farlo funzionare.

Sto usando pythonbrew (che sta usando pip) con installato Python 2.7.5.

Per prima cosa ho fatto ciò che Zubair (sopra) ha detto ed eseguito questo comando:

sudo apt-get install libsqlite3-dev

Quindi ho eseguito questo comando:

pip install pysqlite

Ciò ha risolto il problema del database e ho avuto conferma di ciò quando ho eseguito:

python manager.py syncdb

2
in Centos 6.5 eseguire yum install sqlite-develinvece della prima riga.
Ehsan88,

3
Va bene per Python 2, ma pysqliteora è sqlite3in Python 3 e non puoi farlo pip -m install.
clabe45,

5
pysqlite is not supported on Python 3. When using Python 3, use the sqlite3 module from the standard library
stephen,

19
  1. Installa il sqlite-develpacchetto:

    yum install sqlite-devel -y

  2. Ricompila python dal sorgente:

    ./configure
    make
    make altinstall

10

Il mio _sqlite3.so è in /usr/lib/python2.5/lib-dynload/_sqlite3.so. A giudicare dai percorsi, dovresti avere il file /usr/local/lib/python2.5/lib-dynload/_sqlite3.so.

Prova quanto segue:

find /usr/local -name _sqlite3.so

Se il file non viene trovato, potrebbe esserci un problema con l'installazione di Python. In tal caso, assicurarsi che il percorso su cui è installato sia nel percorso Python. Nella shell Python,

import sys
print sys.path

Nel mio caso, /usr/lib/python2.5/lib-dynload è nell'elenco, quindi è in grado di trovare /usr/lib/python2.5/lib-dynload/_sqlite3.so.


2
appena verificato. il percorso è lì, ma _sqlite3.so manca davvero. Qualche suggerimento se posso installarlo separatamente o meglio reinstallare Python? grazie!
Alexander van Dijk,

2
Sembra che tu abbia creato e installato Python manualmente (i pacchetti nel tuo sistema operativo sono troppo vecchi?), Dal momento che è in / usr / local. Assicurati che il pacchetto sqlite dev sia installato (libsqlite3-dev nelle distribuzioni correnti, forse non nel tuo), o Python non sarà in grado di compilare il modulo. Se lo installi, dovrai ricostruire Python in modo che includa quel modulo.
Glenn Maynard,

Hmm, ho installato libsqlite3-dev e ricostruito Python, ma ora ricevo un altro errore: ImportError: ./_sqlite3.so: simbolo indefinito: PyUnicodeUCS4_DecodeUTF8
Alexander van Dijk

Non ho capito bene. La tua distribuzione ha già Python 2.5 ( pacchetti.debian.org/lenny/python2.5 ). Perché lo costruisci tu stesso?
Glenn Maynard,

1
Ma stai eseguendo Python su / usr / local. Sembra che tu abbia installato Python due volte - una volta te stesso e una volta con apt-get, e quello in / usr / local è rotto.
Glenn Maynard,

8

Di recente ho provato a installare Python 2.6.7 sul mio desktop Ubuntu 11.04 per alcuni lavori di sviluppo. È venuto incontro a problemi simili a questo thread. Ho chiesto di risolverlo:

  1. Modifica del file setup.py per includere il percorso di sviluppo sqlite corretto. Snippet di codice da 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/'
    ]

    Con il bit che ho aggiunto essere '/ usr / lib / x86_64-linux-gnu /'.

  2. Dopo aver eseguito make non ho ricevuto alcun avviso che dicesse che il supporto sqlite non era stato creato (ovvero, costruito correttamente: P), ma dopo l'esecuzione make install, sqlite3 non veniva ancora importato con lo stesso "ImportError: No module named _sqlite3" whe running "import sqlite3 ".

    Quindi, la libreria è stata compilata, ma non è stata spostata nel percorso di installazione corretto, quindi ho copiato il .sofile ( 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/- questi sono i miei percorsi di build, probabilmente dovrai adattarli alla tua configurazione).

Ecco! Il supporto SQLite3 ora funziona.


Grazie! Solo la prima parte era necessaria per Linux Mint Debian Edition, 2014
spookylukey

Grazie! Esattamente lo stesso problema per me. La libreria è costruita ma non copiata nella directory corretta.
Student222,

8

Ho scoperto che molte persone incontrano questo problema perché il Multi-version Python, sul mio vps (cent os 7 x64), l'ho risolto in questo modo:

  1. Trova il file "_sqlite3.so"

    find / -name _sqlite3.so

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

  2. Trova la directory della libreria standard di Python che desideri utilizzare,

    per me /usr/local/lib/python3.6/lib-dynload

  3. Copia il file:

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

Alla fine, tutto andrà bene.


6
Non ha funzionato per me. Ottenuto ImportError: dynamic module does not define module export function (PyInit__sqlite3)su CentOS 7.
xtluo

lo stesso per me, che py2 .sonon può essere usato per py3.6.4? @xtluo
MeadowMuffins

Ho ricevuto invece questo erroreImportError: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
bgenchel

7

my python è compilato dal sorgente, la causa non ha opzioni quando exec configura la versione di python : 3.7.4

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

fisso


6

Questo ha funzionato per me in Redhat Centos 6.5:

yum install sqlite-devel
pip install pysqlite

1
solo che non avevo bisogno di fare il passo del pip
HashRocketSyntax

3

Ho il problema in FreeBSD 8.1:

- No module named _sqlite3 -

È risolto da stand the port ----------

/usr/ports/databases/py-sqlite3

dopo questo si può vedere:

OK ----------
'>>>' import sqlite3 -----
'>>>' sqlite3.apilevel -----
'2.0'

14
Questa risposta ha poco senso. Puoi rivederlo?
Tim Post

Ho avuto lo stesso problema, FreeBSD 8.2 w / Py2.7.2. Risolto semplicemente eseguendo nuovamente make / install, per py-sqlite3.
Giustino,

devi fare deinstall se sembra installato all'inizio. freebsd 10.2
Kunthar

2

Il pacchetto python-pysqlite2 è installato?

sudo apt-get install python-pysqlite2

1
sqlite è installato con Python; non è necessario installare un pacchetto separato per questo, e possiamo dire che ha già la libreria fornita da Python. L'installazione di python-sqlite sarebbe al massimo fonte di confusione.
Glenn Maynard,

Crampo cerebrale Intendevo il pacchetto python-pysqlite2. Non sono riuscito a far funzionare Django / sqlite su Lenny senza questo pacchetto. Ho aggiornato la mia risposta.
bryan,

Ho installato python-pysqlite2.
Alexander van Dijk,

2

Verifica del file settings.py. Non hai appena scritto "sqlite" invece di "sqlite3" per il motore di database?


2

sqlite3viene fornito con Python. Ho anche avuto lo stesso problema, ho appena disinstallatopython3.6 e installato di nuovo.

Disinstallare Python esistente:

sudo apt-get remove --purge python3.6

Installa 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

1

devi essere in centos o redhat e compilare python da solo , è un bug di python fare questo nella tua dir del codice sorgente di python e farlo sotto

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

1

Ho avuto lo stesso problema, niente ha funzionato per me dai precedenti ma ora ho risolto il problema

è sufficiente rimuovere python.pipe sqlite3e reinstallazione

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

ora installalo di nuovo

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

nel mio caso durante l'installazione di sqlite3nuovo ha mostrato qualche errore quindi ho digitato

  1. sqlite3

sul terminale per verificare se è stato rimosso o meno e ha iniziato a spacchettarlo

una volta sqlite3installato il terminale di accensione e scrivere

  1. sqlite3
  2. database.db (per creare un database)

Sono sicuro che questo ti aiuterà sicuramente


1

Mettere la risposta per chiunque arrivi su questa pagina alla ricerca di una soluzione per il sistema operativo Windows:

Devi installare pysqlite3 o db-sqlite3 se non è già installato. puoi usare quanto segue per installare.

  • pip install pysqlite3
  • pip installa db-sqlite3

Per me il problema era con il file DLL di sqlite3.

Soluzione:

  1. Ho preso il file DLL dal sito sqlite . Questo potrebbe variare in base alla versione dell'installazione di Python.

  2. L'ho incollato nella directory DLL di env. per me era "C: \ Anaconda \ Lib \ DLLs", ma controlla il tuo. Prima e dopo aver inserito il file DLL


Ho avuto l'errore esatto. Questo in qualche modo ha risolto il mio problema. Grazie!
uqji

1

Sono rimasto deluso dal fatto che questo problema esiste ancora fino ad oggi. Come ho recentemente provato a installare CLI vCD su CentOS 8.1 e sono stato accolto con lo stesso errore quando ho provato a eseguirlo. Il modo in cui ho dovuto risolverlo nel mio caso è il seguente:

  • Installa SQLite3 da zero con il prefisso appropriato
  • Rendi pulita la mia installazione di Python
  • Esegui Make install per reinstallare Python

Mentre lo sto facendo per creare un blogpost diverso su come installare la CLI di vCD e l'estensione del servizio contenitore VMware. Ho finito per catturare i passaggi che ho usato per risolvere il problema e inserirlo in un post di blog separato all'indirizzo:

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

Lo spero utile, poiché mentre i suggerimenti sopra mi hanno aiutato a trovare una soluzione, ho dovuto combinarne alcuni e modificarli un po '.


Grazie per aver rivelato la tua affiliazione con il link che stai fornendo! È apprezzato.
Robert Columbia,

-1

Scarica sqlite3:

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

Seguire questi passaggi per installare:

$tar xvfz sqlite-autoconf-3071502.tar.gz
$cd sqlite-autoconf-3071502
$./configure --prefix=/usr/local
$make install

1
Questa domanda è stata posta nel 2009 e riguardava Debian 5. sqlite3 è ora disponibile nei repository (da Wheezy), quindi non è necessario installarlo manualmente. Immagino che questo sia vero anche per la maggior parte delle distro.
Jérôme,


-3

Prova a copiare in _sqlite3.somodo che Python possa trovarlo.

Dovrebbe essere semplice come:

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

Fidati di me, provalo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.