python - 在已经安装了 Python 2.7 的系统上从源代码编译 Python 2.7.3

标签 python python-2.7 shared-libraries

我希望从源代码编译 Python 2.7.3。操作系统为OpenSUSE 11.4 x86_64,已经提供了Python 2.7。我想为最新的安全补丁使用 2.7.3,但它是一个共享系统,所以我无法修改系统 Python 解释器。

我使用 ./configure --prefix=/opt/python --enable-shared 进行编译。没有配置错误,所以我 make。再次没有错误。我做了一个 make install(我认为我不需要 make altinstall,因为 /opt/python 中的这个安装前缀不在尚未使用)。

当我尝试运行新的二进制文件 /opt/python/bin/python 时,Python 宣布其版本为 2.7,而不是 2.7.3。我发现纠正此问题的唯一方法是移动系统的 /usr/lib64/libpython2.7.so.1.0,并将其符号链接(symbolic link)到 /opt/python/lib/python/libpython2.7.so.1.0。这有效,Python 宣布它是 2.7.3,但这会破坏系统 Python。

无论如何我可以让两者共存,例如通过让 /opt/python 使用它自己的 libpython?除了在运行时提供 LD_LIBRARY_PATH 之外。有编译时解决方案吗?谢谢。

最佳答案

为避免每次启动 Python 时都必须使用 LD_LIBRARY_PATH 指定运行时库路径,您可以在构建时使用 -rpath 链接器选项指定它:

./configure --enable-shared --prefix=/opt/python \
            LDFLAGS=-Wl,-rpath=/opt/python/lib

关于python - 在已经安装了 Python 2.7 的系统上从源代码编译 Python 2.7.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12553057/

相关文章:

python - 在 Python 上用小数计算 Pi

Python Pandas 数据框查找缺失值

python - Flask 在通过 Gunicorn 运行时无法在模板文件夹中找到 HTML 文件

django - uwsgi和django : ImportError: No module named __future__

c - semctl() 故障 - libc 中的错误?

c++ - 在运行时获取可用的库函数

android - 在 2 个 native 模块 (Android NDK) 之间传递数据

python - 使用 pyviz/panel,如何仅在单击按钮时修改 Pane 中的值?

python - 使用 Python heapq.merge 对大文件进行排序

Python 列表 : Why new list object gets created after concatenation operation?