【问题标题】:Upgrading SQLite in Colab在 Colab 中升级 SQLite
【发布时间】:2022-04-10 16:25:23
【问题描述】:

我一直在通过本地 jupyter notebook 进行一些数据分析,使用 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

【问题讨论】:

  • 首先使用此命令检查您想要的版本是否可用!apt-cache policy sqlite3...结果将其添加到您的问题中
  • @GiovaniSalazar 刚刚添加了上面的结果:)
  • 你只有 Candidate: 3.22.0-1ubuntu0.2 ...让我看看 google colab 中是否有升级选项
  • @GiovaniSalazar 可能不是这个地方,但你知道如何在 ubuntu 上更改候选人吗?我之前也遇到过同样的问题,但我通过 Conda 绕过了它。
  • 可能这项工作 ...pastebin.com/t5AZj86d 但我认为 google colab 删除文件夹....我不使用 Conda

标签: python sqlite google-colaboratory


【解决方案1】:

这是升级到最新版本的方法

!curl https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release | tar xz
%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.7/pysqlite3/_sqlite3.cpython-37m-x86_64-linux-gnu.so \
     /usr/lib/python3.7/lib-dynload/
# then MENU: Runtime > Restart runtime ...
import sqlite3
sqlite3.sqlite_version  # 3.36.0

这是针对 Python 3.7 更新的 example notebook

来自我的 GDrive 的更快(预编译)版本。

!gdown --id 1BSHIKQ7rFw5BpTq5nw1UZfjPK_7Mpnbi -O /usr/lib/python3.7/lib-dynload/
# MENU: Runtime > Restart runtime
import sqlite3
sqlite3.sqlite_version  # '3.38.0'

【讨论】:

  • 谢谢,这似乎奏效了!你知道类似的策略在本地环境中是否行得通?
  • 我想是的。 Colab 已经安装了一些先决条件,您可能需要先添加它们。
  • 哇!你是最棒的。这很好用!谢谢。
【解决方案2】:

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

我们可以利用谷歌在 codelab 中部署最新的 Ubuntu LTS,如下所示,通过访问 Ubuntu 存储库。由 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

方法二:退出内核——最佳解决方案

!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

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 2019-04-04
    • 2021-01-30
    • 2013-11-10
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2013-06-20
    相关资源
    最近更新 更多