没有名为_sqlite3的模块


135

我试图在运行Debian 5的VPS上运行Django应用程序。运行演示应用程序时,它返回此错误:

  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,还是有另一种方法来启动和运行此模块?


1
同样的问题是从源代码编译的Python 3.5.5
Alex-Bogdanov

Answers:


133

您的makefile文件似乎没有包含适当的.so文件。您可以按照以下步骤纠正此问题:

  1. 安装sqlite-devel(或libsqlite3-dev在某些基于Debian的系统上)
  2. 使用以下命令重新配置和重新编译Python ./configure --enable-loadable-sqlite-extensions && make && sudo make install

注意

sudo make install部分将把python版本设置为系统范围的标准,这可能会产生无法预料的后果。如果您在工作站上运行此命令,则可能希望将其现有python 一起安装,可以使用来完成sudo make altinstall


谢谢jammyWolf。我不认为我是在第一次运行configure之后就“丢失”了文件,而是因为运行了已经安装了sqlite-devel的configure导致了所有这些不同。
杰夫·泰勒

配置为我节省了“ ./configure --enable-loadable-sqlite-extensions”
ybdesire

4
如何安装sqlite-devel?我在一个定制的linux系统上。我刚刚下载sqlite-autoconf-3100200.tar.gz并运行./configuremake && make install。重新编译python3之后,它仍然无法正常工作。
AntiMoron '16

2
对于阅读本文的任何人,请确保在答案中添加configure选项。那也救了我。否则,已安装libsqlite3-dev无关紧要。
ticster '16

3
如何检查配置脚本在哪里?
珍娜权

80

我遇到了同样的问题(python2.5从Ubuntu Lucid上的源代码构建),并import sqlite3抛出了同样的异常。我已经libsqlite3-dev从软件包管理器安装了,重新编译了python2.5,然后导入工作了。


6
究竟!您无需手动处理二进制文件和环境。就我而言,我已经从源代码构建了Python 2.7,因此,为减少编译量,我执行了apt-get install libsqlite3-dev; 。/配置; 使libinstall; 进行sharedinstall;
oxfn

38

使用pyenv时,我在Ubuntu上的Python 3.5遇到了相同的问题。

如果您使用pyenv安装python ,则将其列为常见的构建问题之一。要解决此问题,请删除已安装的python版本,安装要求(针对此特殊情况libsqlite3-dev),然后重新安装python版本。


22

这就是我为使其正常工作所做的。

我正在使用安装了python 2.7.5的pythonbrew(正在使用pip)。

我首先执行了Zubair(上面)所说的,然后运行了以下命令:

sudo apt-get install libsqlite3-dev

然后我运行以下命令:

pip install pysqlite

这解决了数据库问题,我在运行时得到了确认:

python manager.py syncdb

2
在Centos 6.5中运行yum install sqlite-devel而不是第一行。
Ehsan88

3
这对Python 2很好,但是pysqlite现在sqlite3在Python 3中,您不能那样pip -m install做。
clabe45 '18

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

19
  1. 安装sqlite-devel软件包:

    yum install sqlite-devel -y

  2. 从源代码重新编译python:

    ./configure
    make
    make altinstall

10

我的_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 Shell中,

import sys
print sys.path

就我而言,/usr/lib/python2.5/lib-dynload在列表中,因此它可以找到/usr/lib/python2.5/lib-dynload/_sqlite3.so。


1
刚刚检查。路径在那里,但是_sqlite3.so确实丢失了。有什么建议我可以单独安装还是更好地重新安装python?谢谢!
亚历山大·范·迪克

2
看起来您是手动构建和安装了Python(操作系统中的软件包太旧了吗?),因为它位于/ usr / local中。确保已安装sqlite dev软件包(当前发行版中的libsqlite3-dev,也许不在您的发行版中),否则Python将无法构建该模块。如果安装它,则需要重建Python,使其包含该模块。
格伦·梅纳德

嗯,我安装了libsqlite3-dev并重建了python,但是现在我得到了另一个错误:ImportError:./_sqlite3.so:undefined symbol:PyUnicodeUCS4_DecodeUTF8
Alexander van Dijk

我很困惑。您的发行版已经安装了Python 2.5(packages.debian.org/lenny/python2.5)。为什么要自己建造?
格伦·梅纳德

啊,对不起,错误的单词选择。实际上,我通过apt-get重新安装了python2.5。
亚历山大·范·迪克

8

我最近尝试在Ubuntu 11.04桌面上安装python 2.6.7,以进行一些开发工作。遇到了与此线程类似的问题。我想通过以下方式修复它:

  1. 调整setup.py文件以包含正确的sqlite开发路径。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。


谢谢!2014
spookylukey

谢谢!对我来说完全一样的问题。库已构建,但未复制到正确的目录。
Student222 '17

8

我发现很多人都遇到了这个问题,因为在我自己的vps(cent os 7 x64)上,Multi-version Python是通过以下方式解决的:

  1. 找到文件“ _sqlite3.so”

    find / -name _sqlite3.so

    出: /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

最后,一切都会好的。


6
没为我工作。ImportError: dynamic module does not define module export function (PyInit__sqlite3)在CentOS 7上获得了
。– xtluo

对我来说一样,py2 .so不能用于py3.6.4吗?@xtluo
MeadowMuffins

我得到了这个错误ImportError: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
bgenchel

6

这在Redhat Centos 6.5中对我有用:

yum install sqlite-devel
pip install pysqlite

就这样,我不需要做点子操作
HashRocketSyntax

6

我的python是从源代码构建的,原因是在exec配置python版本时缺少选项:3.7.4

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

固定


3

我在FreeBSD 8.1中有问题:

- No module named _sqlite3 -

通过站立端口解决----------

/usr/ports/databases/py-sqlite3

在此之后可以看到:

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

13
这个答案几乎没有道理。你可以修改吗?
蒂姆·波斯特

我有同样的问题,FreeBSD 8.2 w / Py2.7.2。通过仅运行py-sqlite3的make / install来解决。
贾斯汀

如果最初看起来已经安装,则必须进行卸载。freebsd 10.2
坤萨

2

是否安装了python-pysqlite2软件包?

sudo apt-get install python-pysqlite2

1
sqlite是用Python安装的;您不需要为此安装单独的软件包,我们可以说他已经有了Python提供的库。安装python-sqlite充其量只会造成混乱。
格伦·梅纳德

脑痉挛。我的意思是python-pysqlite2软件包。没有这个包,我无法让Django / sqlite在lenny上工作。我已经更新了答案。
布莱恩

我安装了python-pysqlite2。
亚历山大·范·迪克

2

检查您的settings.py文件。您是否不仅为数据库引擎编写了“ sqlite”而不是“ sqlite3”?


2

sqlite3Python附带。我也有同样的问题,我只是卸载python3.6并重新安装了它。

卸载现有的python:

sudo apt-get remove --purge python3.6

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

您必须使用centos或redhat并自己编译python,这是python的错误,请在python源代码目录中执行此操作,并在下面执行此操作

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

1

我遇到了同样的问题,上述问题对我没有任何帮助,但是现在我通过

只是删除python.pipsqlite3并重新安装

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

现在再次安装

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

在我的情况下sqlite3再次安装时它显示了一些错误,然后我键入

  1. sqlite3

在终端上检查是否已卸下,然后开始拆箱

一旦sqlite3安装了启动终端并写入

  1. sqlite3
  2. database.db (创建数据库)

我相信这一定会对您有帮助


1

为登录此页面的任何人提供答案,以寻找适用于Windows OS的解决方案:

如果尚未安装pysqlite3或db-sqlite3,则必须安装。您可以使用以下安装。

  • pip安装pysqlite3
  • pip安装db-sqlite3

对我来说,问题在于sqlite3的DLL文件。

解:

  1. 我从sqlite网站上获取了DLL文件。这可能会因您安装的python版本而异。

  2. 我将其粘贴到env的DLL目录中。对我来说,它是“ C:\ Anaconda \ Lib \ DLLs”,但请检查您的。 放置DLL文件前后


我有确切的错误。这以某种方式解决了我的问题。谢谢!
uqji

1

令我感到失望的是,这个问题一直存在到今天。由于我最近一直在尝试在CentOS 8.1上安装vCD CLI,因此在尝试运行它时出现相同的错误,对此我表示欢迎。在我的情况下,我必须解决的方法如下:

  • 使用适当的前缀从头开始安装SQLite3
  • 清理我的Python安装
  • 运行Make install重新安装Python

正如我一直在做的那样,以创建有关如何安装vCD CLI和VMware Container Service Extension的不同博客文章。我最终捕获了用于解决此问题的步骤,并将其放在单独的博客文章中,网址为:

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

我希望这会有所帮助,因为尽管上面的提示帮助我找到了解决方案,但我不得不将其中的几个结合起来并进行一些修改。


感谢您公开与您提供的链接的联系!感激不尽。
罗伯特·哥伦比亚

-1

下载sqlite3:

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

请按照以下步骤进行安装:

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

1
这个问题是在2009年问到的,与Debian 5有关。sqlite3现在可在仓库中使用(自Wheezy起),因此无需手动安装。我想大多数发行版也是如此。
杰罗姆


-3

尝试复制 _sqlite3.so以便Python可以找到它。

它应该很简单:

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

相信我,尝试一下。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.