Ошибка импорта для icu в Mac и Ubuntu, хотя pyicu установлен правильно

Я имею pyicu установлен как в MacOS, так и в Ubuntu 14.04, но при импорте показывает ImportError. Для MacOS высокая сьерра-производительность:

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/Users/siddharthdas/venvs/chai/lib/python3.6/site-packages/icu/__init__.py", line 37, in <module>
  from _icu import *
ImportError: dlopen(/Users/siddharthdas/venvs/chai/lib/python3.6/site-packages/_icu.cpython-36m-darwin.so, 2): Symbol not found: __ZNK6icu_6114Transliterator12getTargetSetERNS_10UnicodeSetE
 Referenced from: /Users/siddharthdas/venvs/chai/lib/python3.6/site-packages/_icu.cpython-36m-darwin.so
 Expected in: flat namespace
in /Users/siddharthdas/venvs/chai/lib/python3.6/site-packages/_icu.cpython-36m-darwin.so

а на убунту 14.0 это:

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/home/hackathon/venvs/grey_worm/lib/python3.4/site-packages/icu/__init__.py", line 37, in <module>
  from _icu import *
ImportError: libicui18n.so.58: cannot open shared object file: No such file or directory

1 ответ

Решение

У меня был такой же опыт при сборке и установке pyicu из источника в моем Mac High Sierra.

Сообщение об ошибке Symbol not found: __ZNK6icu_6114Transliterator12getTargetSetERNS_10UnicodeSetE является признаком несоответствия разделяемой библиотеки между версией ICU, которую мы используем, и версией, которая фактически используется при сборке пакета (Mac имеет встроенную библиотеку ICU в /usr/library/libicucore.dylib - который я подозреваю, используется по умолчанию во время процесса сборки).

Итак, я сделал следующее, чтобы запустить pyicu и запустить с правильной версией icu:

  1. Удалите и переустановите icu4c, используя homebrew (brew remove icu4c а также brew install icu4c)

  2. Создать символическую ссылку icu-config по стандартному пути (ln -s /usr/local/Cellar/icu4c/61.1/bin/icu-config /usr/local/bin/icu-config)

  3. Клонируйте Pyicu из репо, отредактируйте setup.py файл и заполните записи для "Дарвин" в INCLUDES, CFLAGS, LFLAGS, LIBRARIES разделы следующим образом:

    INCLUDES = {
        'darwin': ['/usr/local/Cellar/icu4c/61.1/include']
    }
    
    CFLAGS = {
        'darwin': ['-DPYICU_VER="%s"' %(VERSION), '-std=c++11']
    }
    
    LFLAGS = {
        'darwin': ['-L/usr/local/Cellar/icu4c/61.1/lib']
    }
    
    LIBRARIES = {
        'darwin': ['/usr/local/Cellar/icu4c/61.1/lib']
    }
    
  4. Сборка и установка пакета, т.е. python3 setup.py build а также python3 setup.py install

Примечание. Если вы ранее (безуспешно) пытались собрать пакет, убедитесь, что вы очистили содержимое build/ dir сначала перед перестройкой, поскольку процесс сборки, кажется, пропускает создание новых файлов сборки, если видит каталог, заполненный файлами из предыдущей сборки.

При установке pycu последняя версия на macOS (64.2) против python2.7, которую я сделал в setup.py как описано выше:

INCLUDES = {
    'darwin': ['/usr/local/Cellar/icu4c/64.2'],
    'linux': [],
    'freebsd': ['/usr/local/include'],
    'win32': ['c:/icu/include'],
    'sunos5': [],
    'cygwin': [],
}

CFLAGS = {
    'darwin': ['-DPYICU_VER="%s"' %(VERSION), '-std=c++11'],
    'linux': [],
    'freebsd': ['-std=c++11'],
    'win32': ['/Zc:wchar_t', '/EHsc'],
    'sunos5': ['-std=c++11'],
    'cygwin': ['-D_GNU_SOURCE=1', '-std=c++11'],
}

LFLAGS = {
    'darwin': ['-L/usr/local/Cellar/icu4c/64.2/lib'],
    'linux': [],
    'freebsd': ['-L/usr/local/lib'],
    'win32': ['/LIBPATH:c:/icu/lib'],
    'sunos5': [],
    'cygwin': [],
}

LIBRARIES = {
    'darwin': ['/usr/local/Cellar/icu4c/64.2/lib'],
    'linux': [],
    'freebsd': ['icui18n', 'icuuc', 'icudata'],
    'win32': ['icuin', 'icuuc', 'icudt'],
    'sunos5': ['icui18n', 'icuuc', 'icudata'],
    'cygwin': ['icui18n', 'icuuc', 'icudata'],
}

и для сборки:

CFLAGS=-I/usr/local/opt/icu4c/include LDFLAGS=-L/usr/local/opt/icu4c/lib python setup.py build
python setup.py install

тогда у меня есть PyICU 2.3.1 установлены:

Installed /usr/local/lib/python2.7/site-packages/PyICU-2.3.1-py2.7-macosx-10.14-x86_64.egg
Processing dependencies for PyICU==2.3.1
Finished processing dependencies for PyICU==2.3.1
Другие вопросы по тегам