Żaden moduł o nazwie _sqlite3


145

Próbuję uruchomić aplikację Django na moim VPS z systemem Debian 5. Kiedy uruchamiam aplikację demonstracyjną, wraca z tym błędem:

  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

Patrząc na instalację Pythona, daje ten sam błąd:

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

Czytając w Internecie, dowiaduję się, że Python 2.5 powinien zawierać wszystkie niezbędne opakowania SQLite . Czy muszę ponownie zainstalować Python, czy jest inny sposób na uruchomienie i uruchomienie tego modułu?


1
Ten sam problem dotyczy skompilowanego Pythona 3.5.5 ze źródła
Alex-Bogdanov

Odpowiedzi:


149

Wygląda na to, że Twój .soplik makefile nie zawiera odpowiedniego pliku. Możesz rozwiązać ten problem, wykonując poniższe czynności:

  1. Zainstaluj sqlite-devel(lub libsqlite3-devw niektórych systemach opartych na Debianie)
  2. Skonfiguruj ponownie i ponownie skompiluj Python z ./configure --enable-loadable-sqlite-extensions && make && sudo make install

Uwaga

Ta sudo make installczęść ustawi tę wersję Pythona jako standard ogólnosystemowy, co może mieć nieprzewidziane konsekwencje. Jeśli uruchomisz to polecenie na swojej stacji roboczej, prawdopodobnie będziesz chciał je zainstalować wraz z istniejącym Pythonem, co można zrobić za pomocą sudo make altinstall.


Dzięki, jammyWolf. Nie sądzę, żebym "zgubił" plik po pierwszym uruchomieniu configure, raczej to, że uruchomienie konfiguracji z już zainstalowanym sqlite-devel spowodowało tę różnicę.
Jeff Taylor

4
Jak mogę zainstalować sqlite-devel? Jestem na dostosowanym linux system.I tylko pobrać sqlite-autoconf-3100200.tar.gzi uruchomić ./configure, make && make install. Po ponownej kompilacji Python3 nadal nie działa.
AntiMoron

2
Każdy, kto to czyta, powinien dodać opcję konfiguracji w odpowiedzi. To też mnie uratowało. W przeciwnym razie nie będzie miało znaczenia, że ​​zainstalowałeś libsqlite3-dev.
ticster

3
jak sprawdzić, gdzie jest skrypt konfiguracyjny?
Jenna Kwon

1
żadne z tych rozwiązań (ref: all on this page) nie działa dla amazon linux z Pythonem 3.8.0
bgenchel

81

Miałem ten sam problem (budowanie python2.5ze źródła na Ubuntu Lucid) i import sqlite3rzuciłem ten sam wyjątek. Zainstalowałem libsqlite3-devz menedżera pakietów, ponownie skompilowałem python2.5, a następnie import zadziałał.


6
Dokładnie! Nie musisz ręcznie manipulować plikami binarnymi i środowiskiem. W moim przypadku miałem już Pythona 2.7 skompilowanego ze źródeł, więc aby zminimalizować kompilację, wykonałem apt-get install libsqlite3-dev; ./configure; zrobić libinstall; zrobić sharedinstall;
oxfn

40

Miałem ten sam problem z Pythonem 3.5 na Ubuntu podczas korzystania z pyenv .

Jeśli instalujesz Pythona za pomocą pyenv , jest on wymieniony jako jeden z typowych problemów z kompilacją . Aby go rozwiązać, usuń zainstalowaną wersję Pythona, zainstaluj wymagania (dla tego konkretnego przypadku libsqlite3-dev), a następnie ponownie zainstaluj wersję Pythona.


23

Oto, co zrobiłem, aby to zadziałało.

Używam Pythonbrew (który używa pip) z zainstalowanym Pythonem 2.7.5.

Najpierw zrobiłem to, co powiedział Zubair (powyżej) i uruchomiłem to polecenie:

sudo apt-get install libsqlite3-dev

Następnie uruchomiłem to polecenie:

pip install pysqlite

Naprawiło to problem z bazą danych i otrzymałem potwierdzenie, kiedy uruchomiłem:

python manager.py syncdb

2
w Centos 6.5 działa yum install sqlite-develzamiast pierwszej linii.
Ehsan88,

3
To jest dobre dla Pythona 2, ale pysqliteteraz jest sqlite3w Pythonie 3 i nie możesz pip -m installtego.
clabe45

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

22
  1. Zainstaluj sqlite-develpakiet:

    yum install sqlite-devel -y

  2. Ponownie skompiluj Pythona ze źródła:

    ./configure
    make
    make altinstall
    

12

mój Python jest zbudowany ze źródła, przyczyną jest brak opcji podczas konfiguracji Pythona w wersji 3.7.4

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

naprawiony


11

Mój _sqlite3.so znajduje się w /usr/lib/python2.5/lib-dynload/_sqlite3.so. Sądząc po twoich ścieżkach, powinieneś mieć plik /usr/local/lib/python2.5/lib-dynload/_sqlite3.so.

Spróbuj wykonać następujące czynności:

find /usr/local -name _sqlite3.so

Jeśli plik nie zostanie znaleziony, coś może być nie tak z instalacją Pythona. Jeśli tak, upewnij się, że ścieżka, w której jest zainstalowany, znajduje się w ścieżce Pythona. W powłoce Pythona

import sys
print sys.path

W moim przypadku /usr/lib/python2.5/lib-dynload znajduje się na liście, więc można znaleźć /usr/lib/python2.5/lib-dynload/_sqlite3.so.


2
właśnie sprawdzone. ścieżka jest tam, ale rzeczywiście brakuje _sqlite3.so. Jakieś sugestie, czy mogę zainstalować go osobno, czy lepiej ponownie zainstalować Pythona? dzięki!
Alexander van Dijk

2
Wygląda na to, że skompilowałeś i zainstalowałeś Pythona ręcznie (czy pakiety w twoim systemie operacyjnym są zbyt stare?), Ponieważ znajduje się w / usr / local. Upewnij się, że pakiet dev sqlite jest zainstalowany (libsqlite3-dev w aktualnych dystrybucjach, może nie w twojej), w przeciwnym razie Python nie będzie mógł zbudować modułu. Jeśli go zainstalujesz, będziesz musiał przebudować Pythona, aby zawierał ten moduł.
Glenn Maynard

Hmm, zainstalowałem libsqlite3-dev i przebudowałem Pythona, ale teraz pojawia się kolejny błąd: ImportError: ./_sqlite3.so: undefined symbol: PyUnicodeUCS4_DecodeUTF8
Alexander van Dijk

Jestem zmieszany. Twoja dystrybucja ma już Pythona 2.5 ( packages.debian.org/lenny/python2.5 ). Dlaczego sam to budujesz?
Glenn Maynard

1
Ale uruchamiasz Pythona z / usr / local. Wygląda na to, że dwukrotnie zainstalowałeś Pythona - raz sam i raz z apt-get, a ten w / usr / local jest uszkodzony.
Glenn Maynard

10

Znalazłem wiele osób napotykających ten problem, ponieważ Multi-version Python, na moim własnym vps (cent os 7 x64), rozwiązałem go w ten sposób:

  1. Znajdź plik „_sqlite3.so”

    find / -name _sqlite3.so
    

    na zewnątrz: /usr/lib64/python2.7/lib-dynload/_sqlite3.so

  2. Znajdź katalog biblioteki Python Standard, której chcesz użyć,

    dla mnie /usr/local/lib/python3.6/lib-dynload

  3. Skopiuj plik:

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

Wreszcie wszystko będzie dobrze.


6
Nie działa dla mnie. Dostałem się ImportError: dynamic module does not define module export function (PyInit__sqlite3)na CentOS 7.
xtluo

to samo, czy py2 .sonie może być używany do py3.6.4? @xtluo
MeadowMuffins

Zamiast tego dostałem ten błąd -ImportError: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
bgenchel

9

Niedawno próbowałem zainstalować python 2.6.7 na moim pulpicie Ubuntu 11.04 do pracy deweloperskiej. Napotkałem podobne problemy do tego wątku. Udało mi się to naprawić przez:

  1. Dostosowanie pliku setup.py tak, aby zawierał poprawną ścieżkę dev sqlite. Fragment kodu z 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/'
    ]
    

    Z bitem, który dodałem, to „/ usr / lib / x86_64-linux-gnu /”.

  2. Po uruchomieniu make nie otrzymałem żadnych ostrzeżeń informujących, że obsługa sqlite nie została zbudowana (tj. Została zbudowana poprawnie: P), ale po uruchomieniu make installsqlite3 nadal nie importował z tym samym " ImportError: No module named _sqlite3" whe running "import sqlite3".

    Tak więc biblioteka została skompilowana, ale nie została przeniesiona do właściwej ścieżki instalacji, więc skopiowałem .soplik ( 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/- to są moje ścieżki kompilacji, prawdopodobnie będziesz musiał dostosować je do swojej konfiguracji).

Voila! Obsługa SQLite3 teraz działa.


Dziękuję Ci! Tylko pierwsza część była potrzebna dla Linux Mint Debian Edition, 2014
spookylukey

Dziękuję Ci! Dokładnie ten sam problem dla mnie. Biblioteka jest budowana, ale nie jest kopiowana do właściwego katalogu.
Student 222

7

To zadziałało dla mnie w Redhat Centos 6.5:

yum install sqlite-devel
pip install pysqlite

1
po prostu fyi nie musiałem robić kroku pip
HashRocketSyntax

4

Mam problem we FreeBSD 8.1:

- No module named _sqlite3 -

Rozwiązuje się go przez port ----------

/usr/ports/databases/py-sqlite3

po tym widać:

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

14
Ta odpowiedź nie ma większego sensu. Czy możesz to zmienić?
Tim Post

Miałem ten sam problem, FreeBSD 8.2 z Py2.7.2. Rozwiązany przez ponowne uruchomienie make / install dla py-sqlite3.
Justin

musisz odinstalować, jeśli wydaje się, że jest zainstalowany na początku. freebsd 10.2
Kunthar

4

sqlite3dostarczane z Pythonem. Miałem też ten sam problem, po prostu odinstalowałem python3.6i ponownie zainstalowałem.

Odinstaluj istniejący Python:

sudo apt-get remove --purge python3.6

Zainstaluj 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

3

Czy pakiet python-pysqlite2 jest zainstalowany?

sudo apt-get install python-pysqlite2

1
sqlite jest instalowany z Pythonem; nie musisz instalować do tego osobnego pakietu i możemy powiedzieć, że ma on już bibliotekę dostarczoną przez Pythona. Instalacja python-sqlite byłaby w najlepszym przypadku myląca.
Glenn Maynard

Skurcz mózgu. Miałem na myśli pakiet python-pysqlite2. Nie mogłem zmusić Django / sqlite do pracy na lenny bez tego pakietu. Zaktualizowałem odpowiedź.
bryan

Mam zainstalowany python-pysqlite2.
Alexander van Dijk

3

Sprawdzanie pliku settings.py. Czy nie napisałeś po prostu „sqlite” zamiast „sqlite3” dla silnika bazy danych?


2

musisz być w centos lub redhat i samemu skompilować Pythona , to jest błąd Pythona zrób to w swoim katalogu z kodem źródłowym Pythona i zrób to poniżej

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

2

Mam ten sam problem, nic nie działało dla mnie z powyższych odpowiedzi, ale teraz go naprawiłem

po prostu usunąć python.pipi sqlite3i reinstall

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

teraz zainstaluj go ponownie

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

w moim przypadku podczas sqlite3ponownej instalacji pokazał jakiś błąd, a następnie wpisałem

  1. sqlite3

na terminalu, aby sprawdzić, czy został usunięty, czy nie, i zaczął go rozpakowywać

Po sqlite3zainstalowaniu terminala fireup i napisz

  1. sqlite3
  2. database.db (aby stworzyć bazę danych)

Jestem pewien, że to na pewno ci pomoże


2

Udzielanie odpowiedzi każdemu, kto wyląduje na tej stronie w poszukiwaniu rozwiązania dla systemu operacyjnego Windows:

Musisz zainstalować pysqlite3 lub db-sqlite3, jeśli nie zostały jeszcze zainstalowane. możesz użyć następujących, aby zainstalować.

  • pip zainstaluj pysqlite3
  • pip zainstaluj db-sqlite3

Dla mnie problem dotyczył pliku DLL sqlite3.

Rozwiązanie:

  1. Wziąłem plik DLL z witryny sqlite . Może się to różnić w zależności od wersji instalacji języka Python.

  2. Wkleiłem go w katalogu DLL pliku env. dla mnie był to „C: \ Anaconda \ Lib \ DLLs”, ale poszukaj swojego. Przed i po umieszczeniu pliku DLL


Miałem dokładny błąd. To jakoś rozwiązało mój problem. Dzięki!
uqji

2

Byłem rozczarowany, że ten problem istnieje do dziś. Ponieważ ostatnio próbowałem zainstalować vCD CLI na CentOS 8.1 i zostałem powitany z tym samym błędem, gdy próbowałem go uruchomić. Sposób, w jaki musiałem to rozwiązać w moim przypadku, jest następujący:

  • Zainstaluj SQLite3 od podstaw z odpowiednim prefiksem
  • Wyczyść moją instalację Pythona
  • Uruchom polecenie Make install, aby ponownie zainstalować Pythona

Ponieważ robiłem to, aby utworzyć inny post na blogu o tym, jak zainstalować vCD CLI i rozszerzenie VMware Container Service. W końcu przechwyciłem kroki, które zastosowałem, aby rozwiązać problem, i umieściłem je w osobnym poście na blogu pod adresem:

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

Mam nadzieję, że okaże się to pomocne, ponieważ chociaż powyższe wskazówki pomogły mi w znalezieniu rozwiązania, musiałem połączyć kilka z nich i nieco je zmodyfikować.


Dziękujemy za ujawnienie swojego powiązania z podanym linkiem! To jest doceniane.
Robert Columbia

1

Dla Pythona 3.7.8 z Redhat 7 lub Centos 7.

  • Zainstaluj sqlite-devel
$ yum install sqlite-devel
  • Skompiluj i zainstaluj Python3 z rozszerzeniami sqllite
$ ./configure --enable-optimizations --enable-loadable-sqlite-extensions
$ make install

0

Pobierz sqlite3:

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

Wykonaj następujące kroki, aby zainstalować:

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

1
To pytanie zostało zadane w 2009 roku i dotyczyło Debiana 5. sqlite3 jest teraz dostępne w repozytoriach (od czasów Wheezy), więc nie ma potrzeby instalowania go ręcznie. Myślę, że dotyczy to również większości dystrybucji.
Jérôme


-3

Spróbuj skopiować _sqlite3.so, aby Python mógł go znaleźć.

Powinno być tak proste, jak:

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

Zaufaj mi, spróbuj.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.