如何在虚拟环境中升级Python 2.7.3中的sqlite3?

4 投票
3 回答
10618 浏览
提问于 2025-04-17 13:46

Python 2.7.3自带了一个sqlite3库,但这个版本并不是最新的。

我想在一个虚拟环境(virtualenv)中升级它。换句话说,这个升级只会影响在这个虚拟环境中安装的Python版本。

那么,正确的做法是什么呢?

3 个回答

1

我之前也遇到过同样的问题。这个方法对我有效:

  1. 下载并解压所需的Python版本。
  2. 创建一个名为local的文件夹。
  3. 下载sqlite的包后,解压它。
  4. 运行命令:./configure --prefix=/home/aanuj/local。
  5. 运行命令:make。
  6. 运行命令:make install。
  7. 再次运行命令:./configure --prefix=/home/aanuj/local LDFLAGS='-L/home/aanuj/local/lib' CPPFLAGS='-I/home/aanuj/local/include'。
  8. 再一次运行命令:make。
  9. 找到sqlite3.so文件,并复制到你想要的地方。
  10. 解压beaver。
  11. 用所需的Python版本设置虚拟环境。
  12. 激活这个环境。
  13. 运行命令:unalias python。
  14. 运行命令:export PYTHONPATH=/home/aanuj(_sqlite3.so的所在位置)。
  15. 享受吧!
4

我检查了一下,设置成这样是可以的:

export export LD_LIBRARY_PATH=$HOME/<your-sqlite-install-dir>/sqlite3/lib

我把它加在了export PATH这一行旁边,在activate文件里:

PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
export LD_LIBRARY_PATH=$HOME/…/sqlite3/lib  # <- Here

可以通过两种方式来检查这个设置。

首先,在virtualenv中的Python里,先执行:

>>> import _sqlite3
>>> _sqlite3.__file__
'/usr/lib/…/_sqlite3.cpython-35m-i386-linux-gnu.so'

然后退出Python,运行ldd命令,查看返回的字符串:

$ ldd /usr/lib/…/_sqlite3.cpython-35m-i386-linux-gnu.so
> …
> libsqlite3.so.0 => /home/…/sqlite3/lib/libsqlite3.so.0
> …

或者,另外一种方法,也是从virtualenv中的Python:

>>> import sqlite3
>>> sqlite3.sqlite_version
'3.21.0'  # Was 3.11.8 before
4

下面的步骤对我有用,但如果有改进的空间,请留言告诉我:

  1. 先激活你要安装最新 sqlite3 的虚拟环境。

  2. 从谷歌代码获取最新的 pysqlite 包的源代码:wget http://pysqlite.googlecode.com/files/pysqlite-2.6.3.tar.gz

  3. 从源代码编译 pysqlite,并且要和最新的 sqlite 数据库一起编译:python setup.py build_static

  4. 把它安装到虚拟环境的 site-packages 目录下:python setup.py install

  5. 以上步骤实际上会把 pysqlite 安装到 path-to-virtualenv/lib/python2.7/site-packages,这个地方是所有通过 pip 安装的库所在的地方。

现在,我在虚拟环境中安装了最新版本的 sqlite(已经编译进 pysqlite 里),所以我可以这样使用:from pysqlite2 import dbapi2 as sqlite

撰写回答