Ошибка импорта для 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:
Удалите и переустановите icu4c, используя homebrew (
brew remove icu4c
а такжеbrew install icu4c
)Создать символическую ссылку icu-config по стандартному пути (
ln -s /usr/local/Cellar/icu4c/61.1/bin/icu-config /usr/local/bin/icu-config
)Клонируйте 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'] }
Сборка и установка пакета, т.е.
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