没有名为 _sqlite3 的模块。

231

我正在尝试在运行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吗?还是有其他方法可以使这个模块运行起来?


3
同样的问题也存在于从源代码编译的 Python 3.5.5 版本。 - Alex-Bogdanov
28个回答

268

看起来你的makefile没有包含适当的.so文件。你可以按照以下步骤解决这个问题:

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

注意

sudo make install部分将设置该python版本为全局标准,这可能会带来意想不到的后果。如果你在工作站上运行此命令,则可能希望将其与现有的python一起安装,这可以通过sudo make altinstall完成。


4
我该如何安装sqlite-devel?我使用的是自定义的Linux系统。我刚下载了sqlite-autoconf-3100200.tar.gz并运行了./configure, make && make install。但在重新编译Python3后仍然无法正常工作。 - AntiMoron
7
我该如何检查 configure 脚本的位置? - Jenna Kwon
19
我正在使用 pyenv,安装完 libsqlite3-dev 后,我需要用 pyenv install <python-version> 重新安装你的 Python 版本。 - botchniaque
4
这一页上所有的解决方案都不适用于带有Python 3.8.0的Amazon Linux。 - bgenchel
2
这对我有效。Centos 8,Python 3.8.8 按照以下步骤安装Python3.8 https://computingforgeeks.com/how-to-install-python-3-on-centos/
  1. 执行 yum install sqlite-devel
  2. 进入Python源代码目录(下载的位置) 使用 ./configure --enable-loadable-sqlite-extensions && make && sudo make install 重新配置和编译Python
- penny chan
显示剩余12条评论

98

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

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

pyenv install <python-version> 

如果需要的话,请重新创建虚拟环境。


5
不需要删除已安装的版本,pyenv install <python-version> 会询问是否应该覆盖并重新编译。 - kap
我也使用了pyenv,这对我很有效。必须重新安装整个环境,以便更改生效。在此之前,请记得安装libsqlite3-dev。 - Quang Hoàng Minh

88

我曾经遇到同样的问题(在Ubuntu Lucid上从源代码构建python2.5),并且import sqlite3出现了相同的异常。我从包管理器中安装了libsqlite3-dev,重新编译了python2.5,然后导入就正常了。


6
没错!你不需要手动处理二进制文件和环境。以我的情况为例,我已经从源代码编译了Python 2.7,因此为了缩小编译的大小,我执行了以下命令:apt-get install libsqlite3-dev; ./configure; make libinstall; make sharedinstall; - oxfn

39

我使用源代码构建了 Python,原因是在执行配置时缺少选项。

Python 版本:3.7.4

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

固定


没成功。bash: ./configure: 没有那个文件或目录。 - Quang Hoàng Minh
我是指在Python源目录中执行此命令,类似于这样:https://github.com/python/cpython - Robin
你应该进入你的Python源代码目录,在该目录下使用./configure命令。 - Arco

31
  1. 安装 sqlite-devel 包:

    yum install sqlite-devel -y

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

    ./configure
    make
    make altinstall
    

5
我执行了1(yum install sqlite-devel -y),这个命令没问题。在#2中,我遇到了这个错误bash: ./configure: No such file or directory。我该如何解决? - jis0324
执行 make 命令需要很长时间。它具体做了什么?是重新编译 CentOS 内核还是其他操作? - Raymond
这对我有用,我正在使用CENTOs 7和Python 3.8.14。谢谢。 - aletelecomm

29

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

我使用了安装了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很好,但在Python 3中,pysqlite现在变成了sqlite3,并且您不能使用pip -m install安装它。 - clabe45
9
在Python 3中不支持pysqlite。使用Python 3时,请使用标准库中的sqlite3模块。 - tread
@Joe,我认为应该是manage.py而不是manager.py。 - Vinay Kumar

20

适用于Redhat 7或Centos 7的Python 3.7.8。

  • 安装sqlite-devel。
$ yum install sqlite-devel
  • 使用 SQLite 扩展编译并安装 Python3
$ ./configure --enable-optimizations --enable-loadable-sqlite-extensions
$ make install

可以确认这个在3.10.8版本中可行。 - vencaslac
这也适用于Amazon Linux 2基础镜像,谢谢! - the-lay

14

我发现很多人因为使用多版本的Python而遇到了这个问题,在我的VPS上(CentOS 7 x64),我用以下方法解决了它:

  1. 找到文件“_sqlite3.so”

find / -name _sqlite3.so
  • 查找您想要使用的Python标准库的目录,对我来说是/usr/local/lib/python3.6/lib-dynload

  • 复制文件:

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

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

    最终,一切都会好起来的。


    7
    对我来说没有效果。在CentOS 7上收到了ImportError:dynamic module does not define module export function(PyInit__sqlite3)的错误提示。 - xtluo
    对我来说,py2的.so文件不能用于py3.6.4,是这样吗?@xtluo - MeadowMuffins
    我得到了这个错误 - ImportError: libpython2.7.so.1.0: 无法打开共享对象文件:没有那个文件或目录 - bgenchel
    似乎对我有效:sudo cp /usr/lib64/python3.6/lib-dynload/_sqlite3.cpython-36m-x86_64-linux-gnu.so /usr/local/lib/python3.7/lib-dynload/_sqlite3.so。现在我可以运行tensorboard而不出现_sqlite3错误!谢谢。 - John Jiang

    11

    我的 _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。


    2
    刚刚检查了一下,路径是对的,但确实缺少 _sqlite3.so。有什么建议,我是否可以单独安装它或最好重新安装Python?谢谢! - Alexander van Dijk
    2
    看起来你手动构建并安装了Python(因为它在/usr/local中),这是因为你的操作系统包太旧了吗?请确保安装了sqlite dev包(在当前发行版中为libsqlite3-dev,也许不是在你的发行版中),否则Python将无法构建该模块。如果你安装了它,你需要重新构建Python以包含该模块。 - Glenn Maynard
    哦,我安装了libsqlite3-dev并重新构建了Python,但现在我又遇到了另一个错误:ImportError: ./_sqlite3.so: undefined symbol: PyUnicodeUCS4_DecodeUTF8 - Alexander van Dijk
    我有点困惑。你的发行版已经有Python 2.5了(http://packages.debian.org/lenny/python2.5)。为什么还要自己构建呢? - Glenn Maynard
    啊,抱歉,我用词不当。实际上我是通过apt-get重新安装了Python2.5。 - Alexander van Dijk
    1
    但是你正在 /usr/local 中运行 Python。看起来你安装了两次 Python——一次是自己安装的,另一次是使用 apt-get 安装的,在 /usr/local 中的那个已经损坏了。 - Glenn Maynard

    9

    最近我尝试在我的Ubuntu 11.04桌面上安装Python 2.6.7来进行一些开发工作。遇到了类似于这个帖子的问题。我通过以下方式解决了它:

    1. Adjusting the setup.py file to include the correct sqlite dev path. Code snippet from 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/'
      ]
      

      With the bit that I added being '/usr/lib/x86_64-linux-gnu/'.

    2. After running make I did not get any warnings saying the sqlite support was not built (i.e., it built correctly :P ), but after running make install, sqlite3 still did not import with the same "ImportError: No module named _sqlite3" whe running "import sqlite3".

      So, the library was compiled, but not moved to the correct installation path, so I copied the .so file (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/ — these are my build paths, you will probably need to adjust them to your setup).

    看,SQLite3支持现在可以使用了。


    谢谢!只需要Linux Mint Debian Edition,2014的第一部分。 - spookylukey
    谢谢!我也遇到了完全相同的问题。库已经构建完成,但没有复制到正确的目录中。 - Student222

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接