Không có mô-đun có tên _sqlite3


136

Tôi đang cố chạy ứng dụng Django trên VPS của mình chạy Debian 5. Khi tôi chạy ứng dụng demo, nó sẽ gặp lỗi này:

  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

Nhìn vào bản cài đặt Python, nó đưa ra cùng một lỗi:

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

Đọc trên web, tôi biết rằng Python 2.5 phải đi kèm với tất cả các trình bao bọc SQLite cần thiết đi kèm. Tôi có cần cài đặt lại Python không, hay có cách nào khác để khởi động mô-đun này không?


1
Vấn đề tương tự là đối với python được biên dịch 3.5.5 từ nguồn
Alex-Bogdanov

Câu trả lời:


133

Có vẻ như .sotệp thực hiện của bạn không bao gồm tệp thích hợp . Bạn có thể sửa vấn đề này với các bước dưới đây:

  1. Cài đặt sqlite-devel(hoặc libsqlite3-devtrên một số hệ thống dựa trên Debian)
  2. Cấu hình lại và biên dịch lại Python với ./configure --enable-loadable-sqlite-extensions && make && sudo make install

Ghi chú

Phần sudo make installnày sẽ đặt phiên bản python đó là tiêu chuẩn toàn hệ thống, có thể gây ra hậu quả khôn lường. Nếu bạn chạy lệnh này trên máy trạm của mình, có lẽ bạn sẽ muốn cài đặt nó cùng với python hiện có, có thể được thực hiện với sudo make altinstall.


Cảm ơn jammyWolf. Tôi không nghĩ rằng tôi đã "mất" tệp sau lần đầu tiên chạy cấu hình, thay vào đó, việc chạy cấu hình với sqlite-devel đã được cài đặt đã tạo ra tất cả sự khác biệt này.
Jeff Taylor

4
Làm thế nào tôi có thể cài đặt sqlite-devel? Tôi đang trên một linux system.I tùy chỉnh chỉ cần tải về sqlite-autoconf-3100200.tar.gzvà chạy ./configure, make && make install. Sau khi tôi biên dịch lại python3, nó vẫn không hoạt động.
AntiMoron

2
Đối với bất kỳ ai đọc điều này, hãy đảm bảo thêm tùy chọn cấu hình trong câu trả lời. Đó cũng là điều đã cứu tôi. Nếu không, vấn đề là bạn đã cài đặt libsqlite3-dev.
ticster

3
Làm cách nào để kiểm tra tập lệnh cấu hình ở đâu?
Jenna Kwon

1
không có giải pháp nào trong số này (ref: all trên trang này) hoạt động cho amazon linux với python 3.8.0
bgenchel

80

Tôi gặp vấn đề tương tự (xây dựng python2.5từ nguồn trên Ubuntu Lucid) và import sqlite3đã ném ngoại lệ tương tự. Tôi đã cài đặt libsqlite3-devtừ trình quản lý gói, biên dịch lại python2.5, và sau đó quá trình nhập đã hoạt động.


6
Chính xác! Bạn không phải thao tác thủ công với các tệp nhị phân và môi trường. Trong trường hợp của tôi, tôi đã có Python 2.7 được xây dựng từ nguồn, vì vậy, để giảm thiểu việc biên dịch tôi đã thực hiện cài đặt apt-get libsqlite3-dev; ./có hình; thực hiện cài đặt lib; thực hiện cài đặt chia sẻ;
oxfn

38

Tôi gặp vấn đề tương tự với Python 3.5 trên Ubuntu khi sử dụng pyenv .

Nếu bạn đang cài đặt python bằng pyenv , nó được liệt kê là một trong những vấn đề xây dựng phổ biến . Để giải quyết nó, hãy gỡ bỏ phiên bản python đã cài đặt, cài đặt các yêu cầu (đối với trường hợp cụ thể này libsqlite3-dev), sau đó cài đặt lại phiên bản python.


22

Đây là những gì tôi đã làm để làm cho nó hoạt động.

Tôi đang sử dụng pythonbrew (đang sử dụng pip) với cài đặt python 2.7.5.

Lần đầu tiên tôi đã làm những gì Zubair (ở trên) đã nói và chạy lệnh này:

sudo apt-get install libsqlite3-dev

Sau đó, tôi chạy lệnh này:

pip install pysqlite

Điều này đã khắc phục sự cố cơ sở dữ liệu và tôi đã xác nhận điều này khi chạy:

python manager.py syncdb

2
trong Centos 6.5 chạy yum install sqlite-develthay vì dòng đầu tiên.
Ehsan88

3
Điều đó tốt cho Python 2, nhưng pysqlitegiờ đã có sqlite3trong Python 3 và bạn không thể pip -m installlàm điều đó.
clabe45

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

19
  1. Cài đặt sqlite-develgói:

    yum install sqlite-devel -y

  2. Biên dịch lại python từ nguồn:

    ./configure
    make
    make altinstall

10

_Sqlite3.so của tôi nằm trong /usr/lib/python2.5/lib-dynload/_sqlite3.so. Đánh giá từ các đường dẫn của bạn, bạn nên có tệp /usr/local/lib/python2.5/lib-dynload/_sqlite3.so.

Hãy thử như sau:

find /usr/local -name _sqlite3.so

Nếu không tìm thấy tệp, có thể có lỗi với cài đặt Python của bạn. Nếu có, hãy đảm bảo đường dẫn mà nó đã cài đặt nằm trong đường dẫn Python. Trong trình bao Python,

import sys
print sys.path

Trong trường hợp của tôi, /usr/lib/python2.5/lib-dynload nằm trong danh sách, vì vậy nó có thể tìm thấy /usr/lib/python2.5/lib-dynload/_sqlite3.so.


2
mới kiểm tra. đường dẫn nằm trong đó, nhưng _sqlite3.so thực sự bị thiếu. Bất kỳ đề xuất nào cho dù tôi có thể cài đặt nó một cách riêng biệt hoặc tốt hơn để cài đặt lại python? cám ơn!
Alexander van Dijk

2
Có vẻ như bạn đã xây dựng và cài đặt Python thủ công (các gói trong HĐH của bạn đã quá cũ phải không?), Vì nó nằm trong / usr / local. Đảm bảo rằng gói sqlite dev đã được cài đặt (libsqlite3-dev trong các bản phát hành hiện tại, có thể không phải trong gói của bạn) hoặc Python sẽ không thể xây dựng mô-đun. Nếu bạn cài đặt nó, bạn sẽ cần xây dựng lại Python để nó bao gồm mô-đun đó.
Glenn Maynard

Hmm, tôi đã cài đặt libsqlite3-dev và xây dựng lại python, nhưng bây giờ tôi gặp lỗi anothe: ImportError: ./_sqlite3.so: biểu tượng không xác định: PyUnicodeUCS4_DecodeUTF8
Alexander van Dijk

Tôi bối rối. Distro của bạn có Python 2.5 đã ( packages.debian.org/lenny/python2.5 ). Tại sao bạn tự xây dựng nó?
Glenn Maynard

1
Nhưng bạn đang chạy Python ngoài / usr / local. Có vẻ như bạn đã cài đặt Python hai lần - một lần cho chính mình và một lần với apt-get và một trong / usr / local bị hỏng.
Glenn Maynard

8

Gần đây tôi đã thử cài đặt python 2.6.7 trên máy tính để bàn Ubuntu 11.04 của mình cho một số công việc phát triển. Đã đi qua các vấn đề tương tự với chủ đề này. Tôi đã sửa chữa nó bằng cách:

  1. Điều chỉnh tệp setup.py để bao gồm đường dẫn dev sqlite chính xác. Đoạn mã từ 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/'
    ]

    Với bit mà tôi đã thêm là '/ usr / lib / x86_64-linux-gnu /'.

  2. Sau khi chạy, tôi không nhận được bất kỳ cảnh báo nào nói rằng hỗ trợ sqlite không được xây dựng (nghĩa là nó được xây dựng chính xác: P), nhưng sau khi chạy make install, sqlite3 vẫn không nhập cùng " ImportError: No module named _sqlite3" whe running "import sqlite3".

    Vì vậy, thư viện đã được biên dịch, nhưng không được chuyển đến đường dẫn cài đặt chính xác, vì vậy tôi đã sao chép .sotệp ( 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/- đây là các đường dẫn xây dựng của tôi, có lẽ bạn sẽ cần điều chỉnh chúng để thiết lập).

Voila! Hỗ trợ SQLite3 hiện hoạt động.


Cảm ơn bạn! Chỉ cần phần đầu tiên là cần thiết cho Linux Mint Phiên bản Debian, 2014
spookylukey 17/03/2016

Cảm ơn bạn! Chính xác vấn đề tương tự đối với tôi. Thư viện được xây dựng nhưng không được sao chép vào thư mục bên phải.
Sinh viên 222

8

Tôi đã tìm thấy rất nhiều người gặp phải vấn đề này bởi vì Python đa phiên bản, trên vps của riêng tôi (cent os 7 x64), tôi đã giải quyết nó theo cách này:

  1. Tìm tệp "_sqlite3.so"

    find / -name _sqlite3.so

    ngoài: /usr/lib64/python2.7/lib-dynload/_sqlite3.so

  2. Tìm thư mục của thư viện python Standard mà bạn muốn sử dụng,

    cho tôi /usr/local/lib/python3.6/lib-dynload

  3. Sao chép tập tin:

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

Cuối cùng, mọi thứ sẽ ổn.


6
Không làm việc cho tôi. Đã ImportError: dynamic module does not define module export function (PyInit__sqlite3)lên CentOS 7.
xtluo

tương tự với tôi, là py2 .sokhông thể được sử dụng cho py3.6.4? @xtluo
MeadowMuffins

Tôi đã nhận được lỗi này thay vào đó -ImportError: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
bgenchel

6

Điều này làm việc cho tôi trong Redhat Centos 6.5:

yum install sqlite-devel
pip install pysqlite

1
chỉ cần fyi Tôi không cần thực hiện bước pip
HashRocketSyntax

6

python của tôi được xây dựng từ nguồn, nguyên nhân là thiếu các tùy chọn khi exec cấu hình phiên bản python phiên bản 3.7.4

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

đã sửa


3

Tôi gặp sự cố trong FreeBSD 8.1:

- No module named _sqlite3 -

Nó được giải quyết bằng cách đứng cổng ----------

/usr/ports/databases/py-sqlite3

sau này người ta có thể thấy:

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

14
Câu trả lời này rất ít ý nghĩa. Bạn có thể sửa đổi nó?
Tim Post

Tôi đã có vấn đề tương tự, FreeBSD 8.2 w / Py2.7.2. Đã giải quyết bằng cách chỉ chạy qua make / install lần nữa, cho py-sqlite3.
Justin

bạn phải thực hiện deinstall nếu nó có vẻ như được cài đặt lúc đầu. freebsd 10.2
Kunthar 18/03/2016

2

python-pySqlite2 gói cài đặt không?

sudo apt-get install python-pysqlite2

1
sqlite được cài đặt với Python; bạn không cần phải cài đặt một gói riêng cho nó và chúng tôi có thể nói rằng anh ta đã có thư viện do Python cung cấp. Cài đặt python-sqlite sẽ gây nhầm lẫn tốt nhất.
Glenn Maynard

Chuột rút não. Tôi có nghĩa là gói python-pysqlite2. Tôi không thể để Django / sqlite hoạt động trên đồng xu mà không có gói này. Tôi đã cập nhật câu trả lời của mình.
bryan

Tôi đã cài đặt python-pysqlite2.
Alexander van Dijk

2

Kiểm tra tập tin cài đặt của bạn. Bạn đã không chỉ viết "sqlite" thay vì "sqlite3" cho công cụ cơ sở dữ liệu?


2

sqlite3tàu với Python. Tôi cũng gặp vấn đề tương tự, tôi chỉ cần gỡ cài đặt python3.6và cài đặt lại.

Gỡ cài đặt python hiện có:

sudo apt-get remove --purge python3.6

Cài đặt 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

bạn phải ở trong centos hoặc redhat và tự biên dịch python đó là lỗi của python làm điều này trong thư mục mã nguồn python của bạn và làm điều này dưới đây

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

1

Tôi có cùng một vấn đề, không có gì làm việc cho tôi từ những điều trên nhưng bây giờ tôi đã sửa nó bằng

chỉ cần loại bỏ python.pipsqlite3và cài đặt lại

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

bây giờ cài đặt lại

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

trong trường hợp của tôi trong khi cài đặt sqlite3lại, nó xuất hiện một số lỗi sau đó tôi đã gõ

  1. sqlite3

trên thiết bị đầu cuối để kiểm tra xem nó đã được gỡ bỏ hay chưa và nó bắt đầu giải nén nó

một khi sqlite3thiết bị đầu cuối fireup được cài đặt và viết

  1. sqlite3
  2. database.db (để tạo cơ sở dữ liệu)

Tôi chắc chắn rằng điều này chắc chắn sẽ giúp bạn


1

Đặt câu trả lời cho bất kỳ ai truy cập trang này để tìm giải pháp cho HĐH Windows:

Bạn phải cài đặt pysqlite3 hoặc db-sqlite3 nếu chưa được cài đặt. bạn có thể sử dụng sau đây để cài đặt.

  • Pip cài đặt pysqlite3
  • Pip cài đặt db-sqlite3

Đối với tôi vấn đề là với tập tin DLL của sqlite3.

Giải pháp:

  1. Tôi lấy tập tin DLL từ trang web sqlite . Điều này có thể thay đổi dựa trên phiên bản cài đặt python của bạn.

  2. Tôi đã dán nó trong thư mục DLL của env. đối với tôi đó là "C: \ Anaconda \ Lib \ DLLs", nhưng hãy kiểm tra của bạn. Trước và sau khi đặt tệp DLL


Tôi đã có lỗi chính xác. Điều này bằng cách nào đó đã giải quyết vấn đề của tôi. Cảm ơn!
uqji

1

Tôi đã thất vọng vấn đề này vẫn còn tồn tại cho đến ngày hôm nay. Vì gần đây tôi đã cố gắng cài đặt vCD CLI trên CentOS 8.1 và tôi đã gặp phải lỗi tương tự khi thử chạy nó. Cách tôi phải giải quyết nó trong trường hợp của tôi như sau:

  • Cài đặt SQLite3 từ đầu với tiền tố thích hợp
  • Làm sạch cài đặt Python của tôi
  • Chạy Make install để cài đặt lại Python

Như tôi đã làm điều này để tạo một blogpost khác về cách cài đặt vCD CLI và VMware Container Service Extension. Cuối cùng tôi đã nắm bắt được các bước tôi đã sử dụng để khắc phục sự cố và đưa nó vào một bài đăng blog riêng biệt tại:

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

Tôi hy vọng điều này hữu ích, vì trong khi những lời khuyên ở trên đã giúp tôi đi đến một giải pháp, tôi phải kết hợp một vài trong số chúng và sửa đổi chúng một chút.


Cảm ơn bạn đã tiết lộ liên kết của bạn với liên kết bạn đang cung cấp! Nó được đánh giá cao.
Robert Columbia

-1

Tải xuống sqlite3:

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

Thực hiện theo các bước sau để cài đặt:

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

1
Câu hỏi này đã được hỏi vào năm 2009 và về Debian 5. sqlite3 hiện có sẵn trong các repos (kể từ Wheezy) vì vậy không cần phải cài đặt thủ công. Tôi đoán điều này cũng đúng với hầu hết các distro.
Jérôme


-3

Hãy thử sao chép _sqlite3.sođể Python có thể tìm thấy nó.

Nó nên đơn giản như:

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

Hãy tin tôi, hãy thử nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.