安装和定制
PyPI(推荐)
APSW在https://pypi.org/project/apsw/的平价指数上
它可以按照与其他程序包相同的方式安装:
pip install apsw
当您从PyPI安装时:
对应的SQLite版本被秘密地嵌入到机器的其余部分甚至进程的其余部分中,并且不受其影响或对其可见。
这意味着其他模块和库将继续使用它们以前拥有的SQLite。例如 Core Data 在MacOS上使用SQLite,但不会知道APSW中的SQLite或受其影响。
全 extensions 已启用
SQLITE_ENABLE_COLUMN_METADATA is enabled, providing
Cursor.description_full
PyPI版本包括用于公共平台的预构建二进制文件。如果您的没有被覆盖,那么pip将下载源代码版本并自动使用相同的设置进行编译。它将需要一个C编译器和Python开发头文件。
提供Linux/BSD
大多数Linux和BSD发行版都打包了APSW,它可能落后于SQLite和APSW发行版一年甚至更长时间。APSW提供的发行版使用系统范围的SQLite库。
Debian |
安装 python3-apsw |
软呢帽 |
安装 python3-apsw |
乌班图 |
安装 python3-apsw |
Gentoo |
|
拱形 |
安装 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.cfg
或 setup.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
里面有文件。
apsw-3.43.1.0.zip (来源,包括此HTML帮助)
apsw-3.43.1.0-sigs.zip 所有文件的GPG签名
验证您的下载
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 -仅使用以下选项之一 build 或 build_ext 。
--取回 |
获取相应的SQLite版本 |
--启用-所有-扩展 |
启用所有 standard extensions |
--启用 |
逗号分隔的列表 options to enable that are normally off 省略 |
--省略 |
逗号分隔的列表 options to omit that are normally enabled 省略 |
获取
这为获取的内容提供了更细粒度的控制。
--版本 |
指定要获取的SQLite的显式版本 |
--FETCH-SQLITE |
下载SQLite合并 |
--全部 |
下载除合并之外的所有SQLite组件。随着时间的推移,这包括了额外的扩展和SQLite函数,但目前什么都没有。 |
--缺少-校验和-正常 |
APSW包括SQLite版本的校验和,如果您指定的版本不知道其校验和,则获取将失败。这允许继续进行。 |
build_ext
这将执行C代码的编译。
--Use-System-SQLite-CONFIG |
用途 |
--定义价值 |
其他#定义用逗号分隔。艾格 |
--启用-所有-扩展 |
启用所有 standard extensions |
--启用 |
逗号分隔的列表 options to enable that are normally off 省略 |
--省略 |
逗号分隔的列表 options to omit that are normally enabled 省略 |
测试
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都有很多测试!