安装PyICU导致Python出现分段错误

时间:2019-02-08 16:15:33

标签: python importerror glibc icu pyicu

我一直在尝试安装一个名为Polyglot的Python库,该库反过来需要PyICU(我的麻烦之源)。追赶错误之后,我得以在EC2实例上安装PyICU。但是,在运行Polyglot以及PyICU时,出现以下错误:

Traceback (most recent call last):
  File "/mnt/data/anaconda3/bin/polyglot", line 11, in <module>
    load_entry_point('polyglot==16.7.4', 'console_scripts', 'polyglot')()
  File "/mnt/data/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 487, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/mnt/data/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2728, in load_entry_point
    return ep.load()
  File "/mnt/data/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2346, in load
    return self.resolve()
  File "/mnt/data/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2352, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/mnt/data/anaconda3/lib/python3.6/site-packages/polyglot/__main__.py", line 16, in <module>
    from icu import Locale
  File "/mnt/data/anaconda3/lib/python3.6/site-packages/icu/__init__.py", line 37, in <module>
    from _icu import *
ImportError: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /home/linuxbrew/.linuxbrew/lib/libstdc++.so.6)

要解决上述问题,我执行了以下步骤:

mkdir ~/glibc_install; cd ~/glibc_install 
wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar zxvf glibc-2.18.tar.gz
cd glibc-2.18
mkdir build
cd build
../configure --prefix=/opt/glibc-2.18
make -j4
make install
export LD_LIBRARY_PATH=/opt/glibc-2.18/lib

但是当我简单地运行Python时,我立即遇到了分段错误。

请注意,我在AWS EC2上使用Red Hat 7.1.2-2。

我们将不胜感激!

1 个答案:

答案 0 :(得分:1)

如果您只是想尝试,可以使用glibc 2.28附带的Red Hat Enterprise Linux 8 Beta,因此提供了GLIBC_2.18符号。

如果您使用显式加载程序调用(例如/opt/glibc-2.18/lib64/ld-linux-x86-64.so.2 python …)运行Python,则分段错误将消失。如果您想朝这个方向发展,则应该使用仍保持上游状态的glibc的最新版本(例如,此时的glibc 2.28),并且最好使用Git的release分支,因为它具有许多可修复各种错误的反向端口。 >

但是下一个问题是您试图用自定义副本替换系统libstdc ++库。这可能会破坏系统软件和第三方应用程序。

您应该尝试获取要为Red Hat Enterprise Linux 7(甚至Red Hat Enterprise Linux 6)构建的要安装的软件的副本。使用起来会容易得多,并且可以避免所有这些问题。如果软件是使用比C ++ 98更新的C ++标准编写的,则可以使用Developer Toolset。它具有混合链接模型,可以静态链接更新的C ++标准所需的支持代码,而其余部分仍使用系统libstdc ++,以最大程度地提高互操作性。