如何使用enable_load_extension()?

问题描述 投票:0回答:4

我在使用

enable_load_extension()
时出现以下错误:

AttributeError:'sqlite3.Connection'对象没有属性'enable_load_extension'

我也看到了this,但是sqlite3应该是Python自带的。如何使用正确的选项重新安装它?

默认情况下,sqlite3 模块未构建可加载扩展支持,因为某些平台(特别是 Mac OS X)具有在编译时没有此功能的 SQLite 库。要获得可加载扩展支持,您必须通过 –enable-loadable-sqlite-extensions 进行配置。

python macos sqlite
4个回答
8
投票

检查您的 sqlite3 是否是在启用扩展加载的情况下构建的。您可以通过运行可执行文件进行检查并通过命令

.dbconfig

进行检查
$ sqlite3
SQLite version ...
...
sqlite> .dbconfig
...
load_extension on

如果不是这种情况,请通过 Homebrew 安装 sqlite 或从源代码编译请参阅文档

然后,您想要从头开始构建 Python,并链接适当的 sqlite3 库。使用 pyenv 非常简单。可以通过

PYTHON_CONFIGURE_OPTS
环境变量(详细信息此处)和设置
CPPFLAGS
LDFLAGS
(参见此处

提供特定的构建选项

使用 pyenv 进行构建,假设 sqlite3 是通过 Homebrew 安装的(检查

which sqlite3
brew info sqlite
了解安装版本和位置的详细信息):

PYTHON_CONFIGURE_OPTS="--enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=\$(brew --prefix openssl)" \
LDFLAGS="-L/usr/local/opt/sqlite/lib" \
CPPFLAGS="-I/usr/local/opt/sqlite/include" \
pyenv install 3.8.2

您可能还需要满足 Python3 的一些依赖关系(例如在 macos

brew install openssl xz gdbm

手动构建 Python 也非常简单,并且遵循类似的模式。满足依赖关系后,下载所需版本的 tarball 并设置编译选项以启用 sqlite3 扩展加载(并告诉 make 在哪里可以找到新编译的 SQLite 版本):

./configure --enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=$(brew --prefix openssl)
LDFLAGS="-L<path-to-sqlite>" \
CPPFLAGS="-I<path-to-sqlite>" \
make -j2

1
投票

如果您的 Python

sqlite3
模块不支持加载扩展,您可以使用
sqlean.py
包来修复此问题。

它是标准库的

sqlite3
模块的直接替代品,已经针对 Windows、Linux 和 macOS 进行了预编译,因此您无需编译任何内容。

pip install sqlean.py
import sqlean as sqlite3

# has the same API as the default `sqlite3` module
conn = sqlite3.connect(":memory:")
conn.execute("create table employees(id, name)")
conn.close()

0
投票

您需要找到安装Python的文件夹并重新安装它。

doc开发指南您可以找到有关编译器配置的更多信息。

第 1 步:跟踪您当前的配置

import sysconfig
sysconfig.get_config_vars('CONFIG_ARGS')[0]

第 2 步:重新安装(从 python 文件夹内!)

Python-3.X $ ./configure --with-pydebug \ # for example & add your previous configuration
                         --enable-loadable-sqlite-extensions # <-

Python-3.X $ make -s -j2          # amount of processors
Python-3.X $ sudo make altinstall # doesn't overwrite previous installations

第3步:再次检查第1步的配置

Python-3.X $ ./python # check the prompt
>>> import sysconfig #    etc

第四步:更新路径、环境变量等

有关处理器数量和

altinstall
的更多信息,只需在上面的开发指南的链接中查找ex即可,这不是强制性的,仅取决于您的个人需求。

sqlite3 文档中,您可以找到

enable_load_extension
的工作示例。


0
投票

我使用 pyenv 而不是 macos,这对我有用。

$ brew install sqlite3
$ PYTHON_CONFIGURE_OPTS="--enable-loadable-sqlite-extensions" \
    LDFLAGS="-L/opt/homebrew/opt/sqlite/lib" \
    CPPFLAGS="-I/opt/homebrew/opt/sqlite/include" \
    pyenv install <PYTHON_VERSION>

来源:https://github.com/pyenv/pyenv/issues/1702#issuecomment-1818499967

© www.soinside.com 2019 - 2024. All rights reserved.