当前位置:   article > 正文

【Error】Python3.7 No module named ‘_sqlite3‘ 解决方案_no module named sqlite3

no module named sqlite3

场景:docker容器运行keybert时出现错误 No module named ‘_sqlite3‘,是容器环境没有sqlite的库,如下图所示:

本机是能够正常导入sqlite3的,虚拟环境conda下也有该库。
python3.8版本的不可用于python3.7中,因此需要重新安装一个python3.7的

在这里插入图片描述

第一次尝试(没解决)

  1. 安装 sqlite-devel
apt-get install sqlite-devel
  • 1

报错:Unable to locate package sqlite-devel

第二次尝试(没解决)

  1. 安装sqlite3的包
$ 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 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  1. 对python3进行重新编译
    就是重新安装python环境,希望能够生成sqlite.so
$ 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

第三次尝试(已解决)

如果有conda的朋友,可以很快解决该问题。

    1. 查找本机下_sqlite*.so的相关文件(不是容器内部的)
find / -name _sqlite*.so
  • 1

在这里插入图片描述
可以看得到有python的版本信息,docker容器的环境是python3.7.15,挑了python3.7.11的虚拟环境的文件(_sqlite3.cpython-37m-x86_64-linux-gnu.so)

自己新建虚拟环境的时候,选择和容器环境相同的python版本即可

    1. 复制选定文件到容器
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
  • 1

解释一下相关命令:
docker cp xxx id:xxx 代表复制本机文件到容器中,id代表容器id,xxx是容器文件夹的绝对路径
/usr/src/python37/lib/python3.7/lib-dynload

    1. 结果:查找容器内的_sqlite*.so文件存在,导入sqlite3成功
      在这里插入图片描述
      在这里插入图片描述

参考资料:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/711145
推荐阅读
相关标签
  

闽ICP备14008679号