【问题标题】:What exactly does ./configure --enable-shared do during python altinstall?./configure --enable-shared 在 python altinstall 期间到底做了什么?
【发布时间】:2016-08-04 16:37:34
【问题描述】:

当我使用 altinstall python 2.7.12 时

./configure --prefix=/opt/python --enable-shared

它以python 2.7.5(系统默认python)的形式出现

但没有

--启用共享

它出现在 2.7.12,我错过了什么?

这是在 RHEL 7.2 上


这不是路径问题:

没有--enable-shared

[root@myrig ~]# /opt/python/bin/python2.7 -V

Python 2.7.12

使用--enable-shared

[root@myrig ~]# /opt/python/bin/python2.7 -V

Python 2.7.5

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    像这样编译 python 解决了我的问题:

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

    礼貌内德迪利:

    问题是,在大多数 Unix 系统上(Mac OS X 除外),共享库的路径不是绝对路径。因此,如果您将 Python 安装在非标准位置,这是正确的做法,以免干扰相同版本的系统 Python,您将需要在共享库的路径中进行配置或通过运行时的环境变量,如 LD_LIBRARY_PATH。您最好避免使用 --enable-shared;用它很容易遇到这样的问题。

    参考:https://bugs.python.org/issue27685

    【讨论】:

    • 你的意思是你得到不同python版本的原因是工作目录的不同,而不是--enable-shared的存在,两个构建之间?
    • @bombs:不,有不同python版本的原因是可执行文件/opt/python/bin/python2.7链接到系统python库(2.7.5版),而不是刚刚构建的那个(2.7版) .12)。将-rpath 添加到构建中会为该可执行文件添加一个库搜索目录,从而使其找到正确的共享库。
    • 为我工作,因此我也无法正确安装 wsgi 模块,谢谢..
    【解决方案2】:

    我不确定为什么版本号不同,但 Graham Dumpleton 在this 网站上说:“运行 configure 时,您应该提供 --enable-shared 选项以确保为 Python 构建共享库. 如果不这样做,您将阻止任何想要将 Python 用作嵌入式环境的应用程序工作。”

    【讨论】:

      【解决方案3】:

      使用 ldd 命令,您可以查看可执行文件在哪里搜索库:

      ldd python2.7
          linux-vdso.so.1 =>  (0x00007fffa75ec000)
          libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 (0x00007f717042e000)
          libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7170211000)
          libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f716fe46000)
          libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f716fc2c000)
          libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f716fa28000)
          libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f716f824000)
          libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f716f51b000)
          /lib64/ld-linux-x86-64.so.2 (0x000055969d00b000)enter code here
      

      可以在环境中更改python2.7设置LD_LIBRARY_PATH变量的lib搜索路径(非持久化):

      export LD_LIBRARY_PATH=/opt/python/lib
      

      或设置一个持久的系统范围的方式:

      echo "/opt/python/lib" > /etc/ld.so.conf.d/python.conf
      ldconfig -v
      

      或设置持久可执行方式:

      patchelf --set-rpath /opt/python/lib/ python2.7
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-15
        • 2022-11-10
        • 1970-01-01
        • 2011-02-01
        • 2017-12-04
        • 1970-01-01
        • 2011-12-10
        • 2016-10-26
        相关资源
        最近更新 更多