数据库
首页 > 数据库> > 正确安装带有FTS5支持的sqlite3

正确安装带有FTS5支持的sqlite3

作者:互联网

我正在开发一个Python工具,该工具使用带有FTS5(全文搜索)的sqlite3虚拟表.我想知道如何从tarball(或任何其他方式)正确安装工具正常工作所需的要求,以便为便携性打包它们.

当前,我设法安装了latest release tarball of sqlite.但是,当我执行以下操作时:

python3 -c "import sqlite3; print(sqlite3.sqlite_version)"
# or
python2 -c "import sqlite3; print(sqlite3.sqlite_version)"

我得到3.11.0,而sqlite3 –version返回:3.22.0 2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2alt1

系统版本sqlite3 3.22确实支持FTS5,就像我执行pragma compile_options一样.并得到:

COMPILER=gcc-5.4.0 20160609
ENABLE_DBSTAT_VTAB
ENABLE_FTS4
**ENABLE_FTS5**
ENABLE_JSON1
ENABLE_RTREE
ENABLE_STMTVTAB
ENABLE_UNKNOWN_SQL_FUNCTION
HAVE_ISNAN
THREADSAFE=1

但是,使用this script的python版本返回以下内容:

[(u'ENABLE_COLUMN_METADATA',), (u'ENABLE_DBSTAT_VTAB',), (u'ENABLE_FTS3',), (u'ENABLE_FTS3_PARENTHESIS',), (u'ENABLE_JSON1',), (u'ENABLE_LOAD_EXTENSION',), (u'ENABLE_RTREE',), (u'ENABLE_UNLOCK_NOTIFY',), (u'ENABLE_UPDATE_DELETE_LIMIT',), (u'HAVE_ISNAN',), (u'LIKE_DOESNT_MATCH_BLOBS',), (u'MAX_SCHEMA_RETRY=25',), (u'OMIT_LOOKASIDE',), (u'SECURE_DELETE',), (u'SOUNDEX',), (u'SYSTEM_MALLOC',), (u'TEMP_STORE=1',), (u'THREADSAFE=1',)]

因此,我的问题是:

>有什么办法可以为我的应用程序制作一个可移植的Linux软件包
在python和linux系统中都支持sqlite3 FTS5?
>有什么方法可以将python模块sqlite3链接到特定的
    sqlite3的路径?

我在Ubuntu 16.04 LTS中尝试了所有这些方法,但我也希望在CentOS 7上也能正常工作.

提前非常感谢您.

从我做过的压缩包中获取有关安装的更多详细信息:

wget "https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release" -O sqlite.tar.gz
tar -xzvf sqlite.tar.gz
cd sqlite
./configure --enable-fts5
make
sudo make install

解决方法:

我认为是一个链接问题!我与您遵循相同的安装步骤,并获得了相同的结果:

$python ./test.py 
[(u'ENABLE_COLUMN_METADATA',), (u'ENABLE_FTS3',), (u'ENABLE_RTREE',), (u'ENABLE_UNLOCK_NOTIFY',), (u'ENABLE_UPDATE_DELETE_LIMIT',), (u'MAX_SCHEMA_RETRY=25',), (u'OMIT_LOOKASIDE',), (u'SECURE_DELETE',), (u'SOUNDEX',), (u'SYSTEM_MALLOC',), (u'TEMP_STORE=1',), (u'THREADSAFE=1',)]
NO

但是,当您在Linux上通过configure / make / make install安装某些东西时,它通常位于/usr/local/lib中.为了确保python在运行时针对正确的.so链接,我使用了LD_LIBRARY_PATH.在这种情况下,我得到了:

$LD_LIBRARY_PATH=/usr/local/lib python ./test.py 
[(u'COMPILER=gcc-4.8.5',), (u'ENABLE_FTS5',), (u'HAVE_ISNAN',), (u'TEMP_STORE=1',), (u'THREADSAFE=1',)]
YES

此外,在安装库时,您可能必须更新ldconfig.在我的系统上(Ubuntu 14.04):

$sudo ldconfig
$python ./test.py 
[(u'COMPILER=gcc-4.8.5',), (u'ENABLE_FTS5',), (u'HAVE_ISNAN',), (u'TEMP_STORE=1',), (u'THREADSAFE=1',)]
YES

注意,不再需要使用LD_LIBRARY_PATH,并且指向正确库的python链接.为此,您将需要在ld.so.conf中的某个位置有/usr/local/lib文件夹…对我来说,这是在以下位置:

$grep -ir local /etc/ld.so.conf.d/
/etc/ld.so.conf.d/libc.conf:/usr/local/lib

标签:sqlite,full-text-search,linux,python,fts5
来源: https://codeday.me/bug/20191109/2012607.html