2012-09-23 66 views
6

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

我编译使用./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,并将其符号链接到/opt/python/lib/python/libpython2.7.so.1.0。这工作和Python宣布它是2.7.3,但是这打破了系统Python。

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

+0

看为虚拟ENV – Tim

+0

你需要' - -enable-shared'?我在各种发行版上构建了一个自定义Python数十亿次(没有'--enable-shared'),然后使用这个Python所需的唯一东西就是修改'PATH'。 –

+0

请注意,如果您不使用“--enable-shared”构建Python,则会得到一个包含整个共享库的巨大可执行文件。嵌入需要共享库,这就是Linux发行版使用“--enable-shared”构建的原因。 – user4815162342

回答

15

为了避免指定每个Python的启动时使用LD_LIBRARY_PATH的运行时库路径,你可以在编译的时候指定它使用-rpath链接器选项:

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

完美 - 非常感谢! –