【问题标题】:Compile Python 3.4 with sqlite3使用 sqlite3 编译 Python 3.4
【发布时间】:2014-10-08 15:45:28
【问题描述】:

我已编译 SQLite3 3.8.6 并将其安装到 ${HOME}/opt :

LDFLAGS="-L${HOME}/opt/lib" CFLAGS="-L${HOME}/opt/include" ./configure --prefix=$HOME/opt
make && make install

我现在正在尝试编译 Python 3.4.2 以使用此版本,而不是为整个系统安装的版本。我在这个系统上没有 root 访问权限。为了编译 Python,我使用的是:

LDFLAGS="-L${HOME}/opt/lib" CFLAGS="-L${HOME}/opt/include" ./configure --prefix=$HOME/opt
make && make install

如果使用 SQLite3,我可以用我的新版本编译 Python 3.3.5,但这些相同的步骤似乎不适用于 3.4.2。

如何编译 Python 3.4.2 以包含我位于 ${HOME}/opt 中的 SQLite 3.8.6 版本?

谢谢。

编辑:除了使用旧的系统版本的 sqlite3 而不是我自己编译和安装的版本之外,它可以编译和安装。

【问题讨论】:

  • 尝试在安装过程中获取一些输出以查看它所做的一切并且它没有指向错误的位置
  • 你确定它使用的是系统版本而不是它自己的副本?
  • @CL:是的。我在 Python-3.4.2 源目录中做了一个find . | grep sqlite3.h,它没有返回任何文件。
  • 同样的问题也让我感到困惑。没有安装系统 libsqlite3-dev 包,只有运行时;我已经在 /usr/local 中构建并安装了 sqlite3 3.8.8,配置并构建了 Python 3.4.2,它仍然将“3.7.9”报告为 sqlite3.sqlite_version

标签: python sqlite


【解决方案1】:

您还可以选择将自定义 Python 构建与您自己构建的 sqlite3 预链接。 (我有同样的问题:自定义 python 使用的是系统提供的 sqlite3,完全忽略了我构建的 sqlite3)。

在您的 configuremake 命令前加上:

LD_RUN_PATH=$HOME/opt/lib configure LDFLAGS="-L$HOME/opt/lib" CPPFLAGS="-I$HOME/opt/include" …
LD_RUN_PATH=$HOME/opt/lib make

以便默认情况下构建的python3 链接到您的sqlite3。 这对我有用。

【讨论】:

  • 谢谢,这很好用。现在,无需在我的 .bashrc 中使用 LD_LIBRARY_PATH。
  • 作为替代方案,将-Wl,-rpath=$HOME/opt/lib(告诉ld$HOME/opt/lib 写入其生成的任何二进制文件的运行时路径的链接器标志)添加到LDFLAGS 将(稳健且永久)完成同样的事情,至少如果你的编译器是 GCC。来源:herehere
【解决方案2】:
import platform,sqlite3
print("Oper Sys : %s %s" % (platform.system(), platform.release()))
print("Platform : %s %s" % (platform.python_implementation(),platform.python_version()))
print("SQLite   : %s" % (sqlite3.sqlite_version))

当我运行这段代码时,输​​出包含系统的 sqlite3 版本:

Oper Sys : Linux 3.2.0-4-amd64
Platform : CPython 3.4.2
SQLite   : 3.7.13

在 ${HOME}/opt{include,lib} 下安装 sqlite v3.8.6 并在我的 .bashrc 中设置后:

export LD_LIBRARY_PATH="${HOME}/opt/lib"

我得到了我想要的结果:

Oper Sys : Linux 3.2.0-4-amd64
Platform : CPython 3.4.2
SQLite   : 3.8.6

注意 SQLite 版本从 3.7.13 更改为 3.8.6

【讨论】:

  • 嗨,我在这里按照你的方法在我的~/.bash_profile 中执行export LD_LIBRARY_PATH="/usr/local/opt",其中/usr/local/opt 是包含指向自制软件安装库的所有符号链接的目录,包括sqlite3。但是,重新启动我的 bash 后,它仍然为我提供了 Python 中sqlite3 的系统范围版本。有什么建议吗?
  • 尝试使用@tzot 提供的另一个答案中的方法。
  • 为我工作,但对其他人请注意:注意sqlite3.sqlite_version(指 SQLite 库)和sqlite3.version(指导入 sqlite3 的 python 模块版本,我想)之间的区别。
【解决方案3】:

嗨,对我有帮助:

cd /tmp
wget https://www.sqlite.org/2019/sqlite-autoconf-3280000.tar.gz
tar xvf sqlite-autoconf-3280000.tar.gz
mv /usr/bin/sqlite3 /usr/bin/sqlite3.7
cp /tmp/sqlite-autoconf-3280000/sqlite3 /usr/bin/sqlite3
cp /tmp/sqlite-autoconf-3280000/.libs/libsqlite3.so.0.8.6 /usr/lib64/libsqlite3.so.0.8.6
cp /tmp/sqlite-autoconf-3280000/.libs/libsqlite3.so.0 /usr/lib64/libsqlite3.so.0

【讨论】:

    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 2014-06-26
    • 2011-07-13
    • 2014-04-30
    • 2012-05-21
    • 2015-07-15
    • 2015-02-13
    • 2023-03-21
    相关资源
    最近更新 更多