Ошибка сегментации с Python с установкой PyICU - PullRequest
0 голосов
/ 08 февраля 2019

Я пытался установить библиотеку Python под названием Polyglot, которая, в свою очередь, требует PyICU, источника моих проблем.После погони за ошибками я смог установить PyICU на свой экземпляр EC2.Тем не менее, при запуске 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, у меня сразу же возникла ошибка сегментации.

Обратите внимание, что я использую Red Hat 7.1.2-2 на AWS EC2.

Любая помощь будет наиболее ценной!

1 Ответ

0 голосов
/ 09 февраля 2019

Если вы просто хотите поэкспериментировать, вы можете использовать бета-версию Red Hat Enterprise Linux 8, которая поставляется с glibc 2.28 и поэтому предоставляет символы GLIBC_2.18.

Ошибка сегментации исчезнет, ​​если вызапустить Python с явным вызовом загрузчика (например, /opt/glibc-2.18/lib64/ld-linux-x86-64.so.2 python …).Если вы хотите пойти в этом направлении, вам действительно следует использовать более свежую версию glibc, которая все еще поддерживается в апстриме (например, glibc 2.28 в настоящее время), и в идеале ветку релиза от Git, потому что она имеет много обратных портов для исправления различных ошибок.

Но следующая проблема заключается в том, что вы пытаетесь заменить системную библиотеку libstdc ++ пользовательской копией.Это может привести к поломке системного программного обеспечения и сторонних приложений.

Вам следует попытаться получить копию программного обеспечения, которое вы пытаетесь установить, которое было разработано для Red Hat Enterprise Linux 7 (или даже Red Hat Enterprise Linux 6).).Это будет намного проще в использовании, и избежать всех этих проблем.Если программное обеспечение написано с использованием более нового стандарта C ++, чем C ++ 98, вы можете использовать Developer Toolset .Он имеет гибридную модель связывания, статически связывающую код поддержки, необходимый для более нового стандарта C ++, и в то же время все еще использующую систему libstdc ++ для максимальной совместимости.

...