如何让pyenv编译Python时指定特定版本的SQLite
问题:本地搭建Python 3.9.5 + SQLite 3.31.1环境失败(SQLite版本未同步)
我使用Ubuntu 22.04系统,自带Python版本为3.10.4、SQLite版本为3.37.2。由于代码部署的服务器环境为Python 3.9.5 + SQLite 3.31.1,因此需要在本地搭建相同环境。
使用pyenv成功解决了Python版本问题,但SQLite版本未同步。于是我从源码编译了SQLite 3.31.1,步骤如下:
~$ mkdir -p ~/usrapps/src ~$ cd ~/usrapps/src/ ~/usrapps/src$ wget https://www.sqlite.org/2020/sqlite-autoconf-3310100.tar.gz ~/usrapps/src$ tar xvvf sqlite-autoconf-3310100.tar.gz ~/usrapps/src$ cd sqlite-autoconf-3310100/ ~/usrapps/src/sqlite-autoconf-3310100$ mkdir -p ~/usrapps/sqlite3311 ~/usrapps/src/sqlite-autoconf-3310100$ ./configure --prefix=/home/paulo/usrapps/sqlite3311 ~/usrapps/src/sqlite-autoconf-3310100$ make ~/usrapps/src/sqlite-autoconf-3310100$ make install ~/usrapps/src/sqlite-autoconf-3310100$ cd ~/
之后我尝试三种配置场景,通过pyenv安装Python 3.9.5(注:brew-pyenv-i是CC="$(brew --prefix gcc)/bin/gcc-12" pyenv install的别名,用于解决安装时的OpenSSL缺失问题),每次安装前都会卸载pyenv已安装的Python:
场景1
~$ LDFLAGS="-L/home/paulo/usrapps/sqlite3311/lib" CPPFLAGS="-I/home/paulo/usrapps/sqlite3311/include" brew-pyenv-i 3.9.5
场景2
~$ PYTHON_CONFIGURE_OPTS="LD_RUN_PATH=/home/paulo/usrapps/sqlite3311/lib LDFLAGS=-L/home/paulo/usrapps/sqlite3311/lib" brew-pyenv-i 3.9.5
场景3
~$ PYTHON_CONFIGURE_OPTS="LD_RUN_PATH=/home/paulo/usrapps/sqlite3311/lib LDFLAGS=-L/home/paulo/usrapps/sqlite3311/lib CPPFLAGS=-I/home/paulo/usrapps/sqlite3311/include" brew-pyenv-i 3.9.5
三种场景均成功安装Python 3.9.5,但检查SQLite版本时仍为系统自带的3.37.2,而非编译的3.31.1:
~$ pyenv shell 3.9.5 ~$ python Python 3.9.5 (default, Aug 26 2022, 08:45:14) [GCC 12.1.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sqlite3 >>> sqlite3.sqlite_version '3.37.2'
我希望避免使用pysqlite3,因为这需要修改代码,而我的目标并非在应用中使用多版本SQLite。
内容的提问来源于stack exchange,提问作者Paulo
相关产品推荐
相关产品推荐

