场景:docker容器运行keybert时出现错误 No module named ‘_sqlite3‘
,是容器环境没有sqlite的库,如下图所示:
本机是能够正常导入sqlite3的,虚拟环境conda下也有该库。
python3.8版本的不可用于python3.7中,因此需要重新安装一个python3.7的
apt-get install sqlite-devel
报错:Unable to locate package sqlite-devel
$ wget https://www.sqlite.org/2017/sqlite-autoconf-3170000.tar.gz –no-check-certificate
$ tar zxvf sqlite-autoconf-3170000.tar.gz
$ cd sqlite-autoconf-3170000
$ ./configure –prefix=/usr/local/sqlite
$ make && sudo make install
$ cd Python-3.7.0
$ LD_RUN_PATH=/usr/local/sqlite/lib ./configure LDFLAGS="-L/usr/local/sqlite/lib" CPPFLAGS="-I /usr/local/sqlite/include"
$ LD_RUN_PATH=/usr/local/sqlite/lib make
$ LD_RUN_PATH=/usr/local/sqlite/lib sudo make install
如果有conda的朋友,可以很快解决该问题。
find / -name _sqlite*.so
可以看得到有python的版本信息,docker容器的环境是python3.7.15,挑了python3.7.11的虚拟环境的文件(_sqlite3.cpython-37m-x86_64-linux-gnu.so)
自己新建虚拟环境的时候,选择和容器环境相同的python版本即可
docker cp /data_server/conda_pkgs/python-3.7.11-h12debd9_0/lib/python3.7/lib-dynload/_sqlite3.cpython-37m-x86_64-linux-gnu.so d518b6e47e92:/usr/src/python37/lib/python3.7/lib-dynload
解释一下相关命令:
docker cp xxx id:xxx 代表复制本机文件到容器中,id代表容器id,xxx是容器文件夹的绝对路径
/usr/src/python37/lib/python3.7/lib-dynload