背景
- 博主需要用uwsgi,uwsgi需要Python的头文件;
- 发行版python不包含头文件,于是安装开发版python3-devel;
- yum 安装的python3-devel是3.6.8的,跑最新的django时就会报错,
django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
调研
要用uwsgi就要python3-dev,而在python3-dev下跑最新的django就会因为centos自带的sqlite3版本低报错;
解决
方法1. 自己编译python-dev,再安装uwsgi,跑起来,没试;
方法2. 升级linux的sqlite3(推荐)
详细操作步骤:(其中{}表示变量)
1. 执行rpm -q sqlite
查看自己的包名;
2. 执行rpm -e --nodeps {包名}
移除sqlite包,记得替换成自己的包名,不用{};
3. 执行wget https://www.sqlite.org/2020/sqlite-autoconf-3310000.tar.gz
下载最新的sqlite3源码,上面的地址自己去sqlite官网找到,替换成最新的即可;
4. 解压tar -zxvf sqlite-autoconf-3310000.tar.gz
,文件名记得替换成自己的;
5. 切换目录cd sqlite-autoconf-3310000
6. ./configure --prefix=/usr
7. make && make install
8. echo "include /usr/lib" >> /etc/ld.so.conf
9. ldconfig
注意:其中8,9两步是可选执行,因为博主在执行完1-7后,使用python import sqlite3出现ImportError: libsqlite3.so.0 not found,因此需要执行8,9步把路径添加进去,大家没问题的可以不执行
10. 执行sqlite3 -version
,发现sqlite3已经最新了;
11. 记得清理wget 下载的文件和解压问价;
方法3. 降低django版本(反面教材,线上环境不建议)
方法4. 如果你用不到sqlite,则直接在settings.py里把
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
删了就好了或者配置mysql等
参考:
- https://cloud.tencent.com/developer/article/1439327
- http://www.jyguagua.com/?p=3467
- https://stackoverflow.com/questions/45406361/importerror-libta-lib-so-0-cannot-open-shared-object-file-no-such-file-or-dir