背景
- 博主需要用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版本低报错;
解决
-
自己编译python-dev,再安装uwsgi,跑起来,没试;
-
升级linux的sqlite3(推荐)
详细操作步骤:(其中{}表示变量)- 执行
rpm -q sqlite
查看自己的包名; - 执行
rpm -e --nodeps {包名}
移除sqlite包,记得替换成自己的包名,不用{}; - 执行
wget https://www.sqlite.org/2020/sqlite-autoconf-3310000.tar.gz
下载最新的sqlite3源码,上面的地址自己去sqlite官网找到,替换成最新的即可; - 解压
tar -zxvf sqlite-autoconf-3310000.tar.gz
,文件名记得替换成自己的; - 切换目录
cd sqlite-autoconf-3310000
./configure --prefix=/usr
make && make install
echo "include /usr/lib" >> /etc/ld.so.conf
ldconfig
注意:其中8,9两步是可选执行,因为博主在执行完1-7后,使用python import sqlite3出现ImportError: libsqlite3.so.0 not found,因此需要执行8,9步把路径添加进去,大家没问题的可以不执行- 执行
sqlite3 -version
,发现sqlite3已经最新了; - 记得清理wget 下载的文件和解压问价;
- 执行
-
降低django版本(反面教材,线上环境不建议)
-
如果你用不到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