因为项目比较小所以没有采用Mysql,用了自带的sqlite,结果盲信了“自带”没料到这条看似平坦的路坑却是不少,下面是此次的过坑之旅记录,希望能给同样境遇的提供一个参考。
配置环境:
Linux系统:Alibaba Cloud Linux 3.2104 LTS 64位
Python版本:Python3.10.1
Django版本:Django-4.2.3
坑1:ModuleNotFoundError: No module named '_sqlite3'
错误提示是没有找到sqlite3,Python路径下是存在sqlite3的
但是动态库文件里面没有_sqlite3。
因为服务器上存在多个版本的Python,所以用下面的命令找一下其他版本是否有对应的模块文件。
find / -name _sqlite*.so
结果输出了下面这些路径
用下面的命令把_sqlite3.cpython-36m-x86_64-linux-gnu.so复制到要用的版本的Python对应文件夹里面(红色部分需要根据实际情况修改)
cp /www/server/pyporject_evn/Ericam_venv/lib/python3.10/lib-dynload/_sqlite3.cpython-310-x86_64-linux-gnu.so /usr/local/lib/python3.10/lib-dynload/_sqlite3.cpython-310-x86_64-linux-gnu.so
命令运行后没有反馈就是最好的结果
文件管理器可以看到复制成功
坑2:ModuleNotFoundError: No module named 'PIL'
用下面的命令安装PIL模块(红色部分需要根据实际情况修改)
/usr/local/bin/python3.10 pip install pillow
坑3:django.db.utils.NotSupportedError: SQLite 3.31 or later is required (found 3.26.0).
提示sqlite的版本太低,需要升级,尝试了很多方法都没有效果,最后依靠这个老哥的用pysqlite3替换掉sqlite3的办法解决了问题。https://www.cnblogs.com/shiyixirui/p/16723064.html
先用下面命令安装pysqlite3和pysqlite3-binary
/usr/local/bin/python3.10 pip install pysqlite3
/usr/local/bin/python3.10 pip install pysqlite3-binary
把sqlite3的base文件中的模块导入代码改成pysqlite3
vi /usr/local/lib/python3.10/site-packages/django/db/backends/sqlite3/base.py
把from sqlite3 import dbapi2 as Database的sqlite3改成下面pysqlite3,如下图
用下面的命令实现利用指定版本Python运行Django项目文件(红色部分需要根据实际情况修改)
/usr/local/bin/python3.10 /usr/mysite/django-simpleblog-master/Ericam/manage.py runserver 0.0.0.0:8000
大功告成!