【问题标题】:Cannot import sqlite3 in Python3无法在 Python3 中导入 sqlite3
【发布时间】:2017-02-15 21:02:10
【问题描述】:

我无法在 Python 3.5.0 版中导入 sqlite3 模块。这是我得到的:

>>> import sqlite3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.5/sqlite3/__init__.py", line 23, in <module>
    from sqlite3.dbapi2 import *
  File "/usr/local/lib/python3.5/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ImportError: No module named '_sqlite3'

我知道,我知道,网上有很多 StackOverflow 帖子和支持论坛,人们抱怨这个问题,但到目前为止,没有一个发布的解决方案对我有用。这是我去过的地方:

  1. 我还在这台运行 CentOS 6.8 x86_64 的服务器上安装了 Python 2.6.6。使用 Python 2.6.6 时,我可以很好地打开 Python REPL 并导入 sqlite3。我也可以直接从 bash 中使用 sqlite3,而且似乎没有任何问题。

  2. This helpful question 看起来很有希望。正如用户 jammyWolf 所建议的那样,我尝试使用 --enable-loadable-sqlite-extensions 选项重新配置和重新编译 Python3.5。不,同样的错误仍然发生。

  3. 我一直在像一个好孩子一样使用虚拟环境,但我对这台服务器有 root 访问权限。所以,我是个坏孩子,在没有激活任何 virtualenvs 的情况下以 root 身份运行 python3。仍然没有运气。所以我认为这与权限无关。

  4. 我注意到在错误消息中,它显示No module named '_sqlite3'This thread 建议模块名称前的下划线表示该模块是一个实现细节,并且未在 API 中公开。 ...我不确定如何理解这些信息,但其中可能有提示。

有什么想法吗?

【问题讨论】:

  • sqlite3 是 Python 代码; _sqlite3 是 C 代码。您的发行版的原始 Python 应该已经包含 SQLite 库。 3.5是你自己编译的吗?
  • 是的,我自己编译了 Python 3.5。如果我尝试重新编译它,是否有特定的标志或我应该注意的东西? (另外,我不知道 _sqlite3 是 C 代码;谢谢!)
  • 您的发行版没有一些 3.5 包吗?无论如何,您的问题实际上是关于如何正确编译 Python;编辑它。
  • @CL.,安装python包可以安装sqlite库包(.so)作为依赖项,但不能安装头文件、库(.h、.a、...,包含在sqlite开发包中)这是编译 python 扩展模块时需要的。
  • 有趣的是,在 ubuntu 上安装 sqlite-devel 的方法是:sudo apt-get install libsqlite3-dev。 python编译的配置是一样的(./configure --enable-loadable-sqlite-extensions)。

标签: python linux python-3.x sqlite python-import


【解决方案1】:

Falsetru 是正确的,我将为那些不熟悉的人(Linux 指令)详细介绍一下。如果您收到此错误,可能是您使用的 python 版本编译时没有正确的标头。这是对其进行排序的分步指南。 (Python 3.X.X 指令)

  1. 安装所需的 sqlite 库
   sudo apt-get install libsqlite3-dev 
  1. 卸载python(本指南以python 3.6.5为例)
   sudo apt-get remove python3.6
  1. 从源码下载python
   cd /tmp && wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
  1. 解压存档
   tar -xvf Python-3.6.5.tgz
  1. 配置
   cd Python-3.6.5 && ./configure
  1. 制作和安装(边做边煮咖啡)
   make && sudo make install

如果你做的一切都正确运行“python3.6 -V”应该给你你的python版本。请注意,您还必须重建您拥有的任何虚拟环境。

您可能会遇到的最后一个警告。

zipimport.ZipImportError: can't decompress data; zlib not available

如果您没有安装以下 zlib 库,则会发生这种情况:

sudo apt-get install zlib1g-dev

【讨论】:

    【解决方案2】:

    安装 sqlite-devel 包,其中包含构建 sqlite3 扩展所需的标头、库。

    yum install sqlite-devel
    

    注意:Python 不包括 sqlite3 库本身,而是一个扩展模块(包装器)。

    【讨论】:

    • 啊,我应该提到我试过了。我收到No package sqlite-devel available.
    • @fterdal,试试yum list | grep sqlite | grep dev。它将列出 sqlite 开发包;然后安装那个包而不是sqlite-devel
    • Python 有自己的 SQLite 库副本;不需要单独的包。
    • @CL.,你是这个意思吗? hg.python.org/cpython/file/tip/Modules/_sqlite它本身不是sqlite3库,而是使用sqlite3库的python扩展。
    【解决方案3】:

    我将 sqlite3.dll 复制到此文件夹:

    C:\Users\*****\Anaconda3\DLLs
    

    在尝试了其他所有方法两周后,它成功了。

    【讨论】:

      猜你喜欢
      • 2018-09-19
      • 2022-01-03
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 2017-05-17
      • 2021-05-31
      • 2014-07-26
      相关资源
      最近更新 更多