上一篇解决了openssl和pip问题,这一篇来解决sqlite问题
创建app时出现错误,模块_sqlite3找不到,查询sqlite相关的包:
在python2.6的lib-dynload路径下,有_sqlite3.so,这个应该就是Python需要的sqlite模块,lib-dynload应该就是python相关模块的保存路径。
将其拷贝到Python3.8对应目录中,测试一下:
此时错误提示是导入错误,应该是版本不对造成的。
这个错误通常出现在导入Python C扩展模块时,提示无法正确找到模块导出的初始化函数。
确定一下模块路径:
换一个版本的so,_sqlite3.cpython-38-x86_64-linux-gnu.so,是最新的,依然错误如下
完整安装一个sqlite:
下载:sqlite-autoconf-3450000.tar.gz,是最新的版本
执行:tar -xvf sqlite-autoconf-3450000.tar.gz
cd sqlite-autoconf-3450000
.configure && make && make install
即执行默认安装sqlite,默认安装路径应该是/usr/local
使用: ./configure --prefix=/usr/local/python3.8 --with-openssl=/usr/local/openssl1.1 LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include" && make && make install
安装后:
没有在/usr/local/python3.8/lib/python3.8/lib-dynload下生成_sqlite3.so或_sqlite3.cpython-38-x86_64-linux-gnu.so,安装不成功;
修改一下:执行:
LD_RUN_PATH=/usr/local/lib ./configure --prefix=/usr/local/python3.8 --with-openssl=/usr/local/openssl1.1 LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include"
LD_RUN_PATH=/usr/local/lib make
LD_RUN_PATH=/usr/local/lib make install
这样,就执行成功,
再重新测试一种方法:
安装完sqlite3.45后,将sqlite3.45的lib库路径写ld.so.conf,具体是在/etc/ld.so.conf.d/下新建一个conf文件,文件名随意,一般按软件名,如sqlite3.45.conf,其内容为:/usr/local/lib,然后执行ldconfig -v
随后执行: ./configure --prefix=/usr/local/python3.8 --with-openssl=/usr/local/openssl1.1 LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include",也可以安装成功。
测试将sqlite安装到独立目录中:
1)
tar -xvf sqlite-autoconf-3450000.tar.gz
cd sqlite-autoconf-3450000
./configure --prefix=/usr/local/sqlite3.45 && make && make install
2)sqlite库路径加入ld.so.conf中
3)重新编译安装python3.8
第一次没有加LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include",不成功,随后加上再次执行,成功。