在Colab中升级SQLite

时间:2019-12-20 15:23:06

标签: python sqlite google-colaboratory

我一直在通过本地Jupyter笔记本进行一些数据分析,使用sqlite,pandas和plotly。我想在colab网站上移动该笔记本,以允许其他人使用它,但是它报告的是SQLite版本3.22,而不是3.30。

我正在使用一些仅在SQLite 3.28中可用的窗口函数,并且想要升级SQLite,我已经尝试过

!apt-get update
!apt-get upgrade sqlite3

但这告诉我我具有最新版本的SQLite(即3.22)。有什么想法可以解决吗?

EDIT1:运行`!! apt-cache policy sqlite3``,结果是:

sqlite3:
  Installed: 3.22.0-1ubuntu0.2
  Candidate: 3.22.0-1ubuntu0.2
  Version table:
 *** 3.22.0-1ubuntu0.2 500
        500 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages
        100 /var/lib/dpkg/status
     3.22.0-1 500
        500 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages

2 个答案:

答案 0 :(得分:1)

问题1:安装的sqlite3太旧了。

我们可以通过访问Ubuntu存储库,利用Google在代码实验室中部署最新的Ubuntu LTS,如下所示。由Canonical资助的Dqlite团队维护dqlite的ppa,该ppa依赖于最新的稳定sqlite3。我们可以用三行升级sqlite3。

!sudo add-apt-repository -y ppa:dqlite/stable
!sudo apt update
!sudo apt-get install -y sqlite3

Codelab环境

!lsb_release -a 
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.3 LTS
Release:    18.04
Codename:   bionic

https://dqlite.io/docs/faq https://launchpad.net/~dqlite/+archive/ubuntu/stable

问题2:Codelab已将sqlite3加载到内存中

!lsof -p `ps -ef | grep ipykernel_launcher | head -n 1 | awk '{print $2}'`  | grep sql
python3 131 root  mem       REG                7,0          2359698 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6 (path dev=0,46)
python3 131 root  mem       REG                7,0          5772741 /usr/lib/python3.6/lib-dynload/_sqlite3.cpython-36m-x86_64-linux-gnu.so (path dev=0,46)

如此处所示,libsqlite3已加载到内存中。除非重新启动python进程,否则Python3解释器将无法使用新安装的sqlite3

方法1:杀死Python。 运行时内核崩溃,juypter笔记本电脑将重新启动它。

!sudo add-apt-repository -y ppa:dqlite/stable
!sudo apt update
!sudo apt-get install -y sqlite3
!sqlite3 --version
import sqlite3
print(sqlite3.sqlite_version_info)
### 
!kill `ps -ef | grep ipykernel_launcher | head -n 1 | awk '{print $2}'; /usr/bin/python3 -m ipykernel_launcher -f /root/.local/share/jupyter/runtime/kernel-*.json`
###
import sqlite3
sqlite3.sqlite_version_info

方法2:退出内核-最佳解决方案

!sudo add-apt-repository -y ppa:dqlite/stable
!sudo apt update
!sudo apt-get install -y sqlite3
!sqlite3 --version
import sqlite3, os
print(sqlite3.sqlite_version_info)
os._exit(00)
import sqlite3
print(sqlite3.sqlite_version_info)

Restart ipython Kernel with a command from a cell

答案 1 :(得分:0)

这是如何升级到最新版本

!wget https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release -O sqlite.tar.gz
!tar xzf sqlite.tar.gz
%cd sqlite/
!./configure
!make sqlite3.c
%cd /content
!npx degit coleifer/pysqlite3 -f
!cp sqlite/sqlite3.[ch] .
!python setup.py build_static build
!cp build/lib.linux-x86_64-3.6/pysqlite3/_sqlite3.cpython-36m-x86_64-linux-gnu.so \
    /usr/lib/python3.6/lib-dynload/_sqlite3.cpython-36m-x86_64-linux-gnu.so
# then MENU: Runtime > Restart runtime ...
import sqlite3
sqlite3.sqlite_version  # 3.30.1

这里的example notebook显示了许多试验和错误。结果在最后。