在新的Python源安装上运行get-pip之后的未定义符号

时间:2017-02-14 18:44:54

标签: python c linux pip centos6

我根据CentOS 6.6上的自述文件从源代码安装了python 2.7.13。 (只需遵循configure / make过程)。我从命令行运行这些python,似乎工作正常。但是,因为它没有pip和setuptools,我下载了get-pip.py并尝试以这种方式运行它: /share/apps/Python-2.7.13/bin/python2.7 get-pip.py 然后我收到以下错误:

Traceback (most recent call last): File "get-pip.py", line 28, in <module> import tempfile File "/share/apps/Python-2.7.13/lib/python2.7/tempfile.py", line 32, in <module> import io as _io File "/share/apps/Python-2.7.13/lib/python2.7/io.py", line 51, in <module> import _io ImportError: /share/apps/Python-2.7.13/lib/python2.7/lib-dynload/_io.so: undefined symbol: _PyCodec_LookupTextEncoding

我在Python 2.7.12中尝试了相同的结果。 但是,如果我使用预构建的python 2.7.12版本运行get-pip.py,它可以正常工作。

编辑:我用nm -g检查了库/share/apps/Python-2.7.13/lib/python2.7/lib-dynload/_io.so,符号似乎在那里(我找到了U _PyCodec_LookupTextEncoding)

任何帮助将不胜感激, 提前致谢, 贝尔纳韦

1 个答案:

答案 0 :(得分:1)

经过多挖掘后,我发现了问题。 该符号在_io.so中未定义。我找到了这个库,并了解到它指向了一个较旧的libpython2.7.so(这是在新版本中定义符号的库)。这是因为我的LDD_LIBRARY_PATH中有旧的/ opt / python / lib:

linux-vdso.so.1 => (0x00007fffb68d5000) libpython2.7.so.1.0 => /opt/python/lib/libpython2.7.so.1.0 (0x00007f4240492000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f424025f000) libc.so.6 => /lib64/libc.so.6 (0x00007f423fecb000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f423fcc7000) libutil.so.1 => /lib64/libutil.so.1 (0x00007f423fac3000) libm.so.6 => /lib64/libm.so.6 (0x00007f423f83f000) /lib64/ld-linux-x86-64.so.2 (0x000000337b000000)

我解决了这个问题,解决了这个问题。