如何在虚拟环境中升级Python 2.7.3中的sqlite3?
Python 2.7.3自带了一个sqlite3库,但这个版本并不是最新的。
我想在一个虚拟环境(virtualenv)中升级它。换句话说,这个升级只会影响在这个虚拟环境中安装的Python版本。
那么,正确的做法是什么呢?
3 个回答
1
我之前也遇到过同样的问题。这个方法对我有效:
- 下载并解压所需的Python版本。
- 创建一个名为local的文件夹。
- 下载sqlite的包后,解压它。
- 运行命令:./configure --prefix=/home/aanuj/local。
- 运行命令:make。
- 运行命令:make install。
- 再次运行命令:./configure --prefix=/home/aanuj/local LDFLAGS='-L/home/aanuj/local/lib' CPPFLAGS='-I/home/aanuj/local/include'。
- 再一次运行命令:make。
- 找到sqlite3.so文件,并复制到你想要的地方。
- 解压beaver。
- 用所需的Python版本设置虚拟环境。
- 激活这个环境。
- 运行命令:unalias python。
- 运行命令:export PYTHONPATH=/home/aanuj(_sqlite3.so的所在位置)。
- 享受吧!
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
下面的步骤对我有用,但如果有改进的空间,请留言告诉我:
先激活你要安装最新
sqlite3
的虚拟环境。从谷歌代码获取最新的
pysqlite
包的源代码:wget http://pysqlite.googlecode.com/files/pysqlite-2.6.3.tar.gz
从源代码编译
pysqlite
,并且要和最新的 sqlite 数据库一起编译:python setup.py build_static
把它安装到虚拟环境的 site-packages 目录下:
python setup.py install
以上步骤实际上会把
pysqlite
安装到path-to-virtualenv/lib/python2.7/site-packages
,这个地方是所有通过 pip 安装的库所在的地方。
现在,我在虚拟环境中安装了最新版本的 sqlite
(已经编译进 pysqlite
里),所以我可以这样使用:from pysqlite2 import dbapi2 as sqlite