树莓派 Python3下安装Django

核心问题是要解决Django版本和Python版本匹配问题。版本间兼容关系如下,详细可以看这里

Django versionPython versions
2.23.5, 3.6, 3.7, 3.8 (added in 2.2.8), 3.9 (added in 2.2.17)
3.13.6, 3.7, 3.8, 3.9 (added in 3.1.3)
3.23.6, 3.7, 3.8, 3.9

从以上可知,如果要安装最新的Django3.2,那Python版本必须要3.6以上。而现在手上的树莓派3B里的Python是3.4,所以必须要先升级。

升级方法都要涉及到Python的编译,具体如下。

sudo apt update
sudo apt install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev      #安装依赖库
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz
tar zxvf Python-3.7.3.tar.xz
cd Python-3.7.3
sudo ./configure
sudo make -j4    #多核心编译
sudo make altinstall       #不替换原版本

rm -rf /usr/bin/python3     
sudo ln -s /usr/local/bin/python3.7 /usr/bin/python3     #修改默认Python3

rm -rf /usr/bin/pip3
sudo ln -s /usr/local/bin/pip3.7 /usr/bin/pip3    ##修改默认Pip3

安装完成后,当运行 python3 manage.py runserver 8000后,出现错误提示,
Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/usr/local/python3/lib/python3.7/threading.py", line 917, in _bootstrap_inner
    self.run()

....

最终提示找不到sqlite3,无法import

当时考虑这里有两个问题,一个是需要安装sqlite3,另一个对于Exception,查了网上的说法和Django版本有关,需要降级。但实际查了官网的版本对应关系后,Python3.7是完全没有问题的。所以检查没有尝试降级的做法,先是考虑安装sqlite3。

关于sqlite安装,网上的做法是要下载编译sqlite,然后再次编译Python,看上去很繁琐。同时在Django的安装文档里也看到sqlite是在Python里应该已经自带,所以提出问题,为什么刚才的安装里没包含呢?后来对比了多个树莓派Python的升级方法中,对于依赖库的安装,有些是带了sqlite,有些是没带,而我一开始用的恰好是没带的方法。然后,马上尝试单独追加安装依赖,并重新编译Python,在做auto configure的时候,应该会找到sqlite并把它包含编译进去。

sudo apt install libsqlite3-dev sqlite3

安装完成后,在Python3下,import sqlite3可以验证是否安装成功。还可以这样验证: find / -name _sqlite*.so,是否能在Python3.7下找到so文件。

说明一下,上面的依赖库安装已经是包含sqlite3了。

好,现在再次运行, python3 manage.py runserver 8000 一切正常了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值