安装和定制

提供Linux/BSD

大多数Linux和BSD发行版都打包了APSW,它可能落后于SQLite和APSW发行版一年甚至更长时间。APSW提供的发行版使用系统范围的SQLite库。

Debian

安装 python3-apsw

软呢帽

安装 python3-apsw

乌班图

安装 python3-apsw

Gentoo

安装 dev-python/apsw

拱形

安装 python-apsw

有一个 full list (150+) 发行版的名称、APSW的包名,以及它们当前所在的APSW版本。

构建和定制

目前有几种不同的方法(都是有效的)来自于Python打包解决方案。

构建过程

无论使用什么工具,它最终都会调用 setup.py 。这是构建C扩展的标准方法,最初由distutils提供,现在由setupTools提供。

一系列命令和选项被提供给 setup.py 在此模式中:

python setup.py cmdone --option --option value cmdtwo --option \
   cmdthree --option --option value

唯一需要的命令是 build 。你可以通过以下方式获得帮助 --help

python setup.py build --help

每个命令都采用可在命令行或名为的配置文件中指定的选项 setup.cfgsetup.apsw 。选项上的前导双破折号被省略,破折号应该变成下划线。

# This is used with pypi source and binary builds

[build]
# download corresponding sqlite release
fetch = True
# all extensions included
enable_all_extensions = True
# ... except icu (not abi stable)
omit = icu
# for Cursor.description_full
enable = COLUMN_METADATA

SQLite选项

重要的是要了解 SQLite's compile time options 。它们提供对包括或排除在SQLite中的功能和API的控制。

APSW需要知道所选择的选项,以便它能够适应。例如,如果从SQLite中省略了扩展加载,那么APSW也需要省略相同的功能,否则编译或链接将失败。

正在查找SQLite

APSW可以获取SQLite,如下所述,并将其放置在 sqlite3/ 子目录。您可以将您自己的SQLite放在该目录中。如果有一个 sqlite3.c (即) amalgamation ),那么它将被静态地包括在APSW中。如果存在已编译的SQLite,则将拾取它。如果这些都不存在,则使用标准编译器位置(例如 /usr/include 在Unix上)。

如果 sqlite3/sqlite3config.h 在此之前已包括在内 sqlite3/sqlite3.c 。这是一个很好的放置地点 platform configuration APSW的FETCH通过运行以下命令自动完成 configure

来源

建议您从以下位置获取源代码 Github releases 。如果你从哪里得到消息来源 PyPi 然后确保您编辑了 setup.apsw 里面有文件。

验证您的下载

Source releases 是经过数字签名的,因此您可以验证它们是否被篡改。下载并解压相应的签名压缩文件。这些说明是针对 GNU Privacy Guard 。(GPG作为标准安装在大多数Unix/Linux平台上,可在Windows上下载。)

验证

要验证文件,请使用--验证指定相应的 .asc 文件名。此示例验证源::

$ gpg --verify apsw-3.43.1.0.zip.asc
gpg: Signature made ... date ... using DSA key ID 0DFBD904
gpg: Good signature from "Roger Binns <rogerb@rogerbinns.com>"

如果你得到了一个“好的签名”,那么这个文件没有被篡改,你就可以继续工作了。

获取签名密钥

您可能没有可用的签名密钥,在这种情况下,最后一行将如下所示::

gpg: Can't check signature: public key not found

您可以使用以下命令获取密钥的副本::

$ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 0DFBD904
gpg: requesting key 0DFBD904 from hkp server keyserver.ubuntu.com
gpg: /home/username/.gnupg/trustdb.gpg: trustdb created
gpg: key 0DFBD904: public key "Roger Binns <rogerb@rogerbinns.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1

重复验证步骤。

命令及其选项

这些是相关的 setup.py 命令及其相关选项。

建房

完成整个建造过程。这将调用 build_ext -仅使用以下选项之一 buildbuild_ext

--取回

获取相应的SQLite版本

--启用-所有-扩展

启用所有 standard extensions

--启用

逗号分隔的列表 options to enable that are normally off 省略 SQLITE_ENABLE 前缀。他们将得到更高的评价。艾格 --enable column_metadata,fts5

--省略

逗号分隔的列表 options to omit that are normally enabled 省略 SQLITE_OMIT 前缀。他们将得到更高的评价。艾格 --omit automatic_index

获取

这为获取的内容提供了更细粒度的控制。

--版本

指定要获取的SQLite的显式版本

--FETCH-SQLITE

下载SQLite合并

--全部

下载除合并之外的所有SQLite组件。随着时间的推移,这包括了额外的扩展和SQLite函数,但目前什么都没有。

--缺少-校验和-正常

APSW包括SQLite版本的校验和,如果您指定的版本不知道其校验和,则获取将失败。这允许继续进行。

build_ext

这将执行C代码的编译。

--Use-System-SQLite-CONFIG

用途 ctypes 确定系统范围的SQLite库编译选项

--定义价值

其他#定义用逗号分隔。艾格 --definevalues SQLITE_MAX_ATTACHED=37,SQLITE_EXTRA_INIT=mycore_init

--启用-所有-扩展

启用所有 standard extensions

--启用

逗号分隔的列表 options to enable that are normally off 省略 SQLITE_ENABLE 前缀。他们将得到更高的评价。艾格 --enable column_metadata,fts5

--省略

逗号分隔的列表 options to omit that are normally enabled 省略 SQLITE_OMIT 前缀。他们将得到更高的评价。艾格 --omit automatic_index

测试

SQLite本身就是 extensively tested 。它用于测试的代码比组成实际数据库功能的代码多得多。

APSW包括使用标准的Python测试模块来验证正确操作的测试。在测试的同时还开发了新的代码。报告的问题也有测试用例,以确保问题不会发生或不会再次发生。::

$ python3 -m apsw.tests
                Python  /usr/bin/python3 sys.version_info(major=3, minor=10, micro=4, releaselevel='final', serial=0)
Testing with APSW file  /space/apsw/apsw/__init__.cpython-310-x86_64-linux-gnu.so
          APSW version  3.39.2.0
    SQLite lib version  3.39.2
SQLite headers version  3039002
    Using amalgamation  True
...............................................................................................
----------------------------------------------------------------------
Ran 95 tests in 25.990s

OK

测试还确保执行尽可能多的APSW代码,包括代码的替代路径。95.5%的APSW代码通过测试执行。如果您签出APSW源代码,则会有一个脚本 tools/coverage.sh 这就启用了故意导致额外情况的额外代码,如内存分配失败、SQLite返回未记录的错误代码等。这使代码覆盖率高达99.6%。

内存检查器 Valgrind is used while running the test suite. The test suite is run multiple times to make any memory leaks or similar issues stand out. A checking version of Python is also used. See tools/valgrind.sh in the source. The same testing is also done with the compiler's sanitizer option

为了确保与各种Python版本的兼容性,脚本针对运行测试的APSW和SQLite支持的版本下载并编译调试和发布配置(以及32位和64位)中的所有支持的Python版本。看见 tools/megatest.py 在源头上。

简而言之,SQLite和APSW都有很多测试!