安装多版本python27并开启enable-shared

安装多个python27的版本,如果不开启enable-shared,指定不同路径即可。当开启enable-shared时,默认只有一个版本的python。
比如通过gcc4 和 gcc5 分别编译安装python到不同的路径,通过ldd查看关联的库,会发现都指向了同一个libpython2.7.so.1.0。

# 通过gcc4编译安装的python27,指向的是/opt/python27/lib

[root@cs-pl-test Python-2.7.2]# ldd /opt/pythonGcc5/bin/python
    linux-vdso.so.1 =>  (0x00007ffe027c6000)
    libpython2.7.so.1.0 => /opt/python27/lib/libpython2.7.so.1.0 (0x00007fc50ae77000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc50ac59000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fc50aa55000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00007fc50a852000)
    libm.so.6 => /lib64/libm.so.6 (0x00007fc50a5cd000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fc50a239000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fc50b260000)
# 通过gcc5编译安装的python27,指向的也是/opt/python27/lib

[root@cs-pl-test Python-2.7.13]# ldd /opt/pythonGcc5/bin/python
    linux-vdso.so.1 =>  (0x00007fff057ff000)
    libpython2.7.so.1.0 => /opt/python27/lib/libpython2.7.so.1.0 (0x00007f4e1b7bc000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4e1b59e000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f4e1b39a000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00007f4e1b197000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f4e1af12000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f4e1ab7e000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f4e1bba5000)

所以要共存的话,把它们指向的库改成对应的libpython2.7.so.1.0即可。

方法一
在编译时,指定LD_RUN_PATH

LD_RUN_PATH=/usr/local/lib make

比如这里指定了lib库的路径是/usr/local/lib,make后,python的libpython2.7.so.1.0 就指向/usr/local/lib了。注意,这里要先将当前路径下的libpython2.7.so.1.0复制到/usr/local/lib下,之后再make install

cp libpython2.7.so.1.0 /usr/local/lib

再看下该版本的指向,已经是/usr/local/lib了

[root@cs-pl-test Python-2.7.13]# ldd /opt/pythonGcc5/bin/python
    linux-vdso.so.1 =>  (0x00007ffea43af000)
    libpython2.7.so.1.0 => /usr/local/lib/libpython2.7.so.1.0 (0x00007f971d0fe000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f971ced4000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f971ccd0000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00007f971cacd000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f971c848000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f971c4b4000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f971d4db000)

方法二
使用工具修改python的libpython2.7.so.1.0指向
本次用patchelf
https://github.com/NixOS/patchelf
先编译安装下这个工具

git clone https://github.com/NixOS/patchelf
cd patchelf
./bootstrap.sh
./configure
make
make install

安装完成后,去到要修改的python路径下,先去掉现有的指向

/opt/patchelf/bin/patchelf --remove-needed libpython2.7.so.1.0 ./python

之后再增加到新路径即可

/opt/patchelf/bin/patchelf --add-needed /usr/local/lib/libpython2.7.so.1.0 ./python

推荐用第一种方法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值