python版本:3.6.0
django版本:2.0.4
Ubuntu系统

在《Python编程:从入门到实践》这本书最后一个Web项目中的例子, 使用virtualenv创建虚拟环境,然后在Django中创建项目:

1
django-admin.py startproject learning_log .

创建了一个learning_log的项目,然后创建数据库:

1
python manage.py migrate

报错:No module named ‘_sqlite3’

查找网上资料,在虚拟环境下安装libsqlite3-dev

1
sudo apt-get install libsqlite3-dev

然后重新下载Python 3.6.0的源码,重新编译

1
2
3
tar -xvf Python-3.6.0.tar.xz
cd Python-3.6.0
./configure --enable-loadable-sqlite-extensions && make && sudo make install

我的方法来源:
https://stackoverflow.com/questions/1210664/no-module-named-sqlite3
https://stackoverflow.com/questions/10784132/django-no-module-named-sqlite3

网上找的资料基本到这里就可以了,再在python中导入sqlite3就可以成功了。但是我的依然没有:

这让我困惑了好久。。重新编译Python,重启电脑,还是No module named _sqlite3

过了几个小时。。。

在博客园看到的这篇文章终于搞明白了:http://www.cnblogs.com/itflycat/p/4461897.html

上面的安装和编译过程都没有问题,,问题出现在了pyenv创造的虚拟环境learning_log_env,在这个虚拟环境下我的python版本是3.6.0,而退出这个虚拟环境pyenv deactivate后,我的python安装的版本也是3.6.0,但是这两个是不同环境下的,我把两个搞混了,之前编译的一直都是退出learning_log_env这个环境编译的python,而我需要重新编译的是进入虚拟环境下的这个版本的Python,sqlite3也是装在虚拟环境里的

明白问题出在哪里就好办了:

1
2
3
4
5
6
# 先退出virtualenv的python环境
pyenv deactivate
# 删掉原有的learning_log_env环境下的3.6.0版本
pyenv uninstall 3.6.0
# 再重新装
pyenv install -v 3.6.0

发现使用pyenv下载安装的非常慢,可以用这个方法:http://huanyouchen.github.io/2018/04/29/pyenv-install-python-very-slow/

把虚拟环境下python重新安装一遍,再次import sqlite3就不会报错了