尽管pyicu已正确安装,但Mac和Ubuntu中icu的导入错误

Sid*_*Das 1 importerror python-3.x 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
Run Code Online (Sandbox Code Playgroud)

在ubuntu 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
Run Code Online (Sandbox Code Playgroud)

小智 8

pyicu在Mac High Sierra中构建和安装源代码时,我有相同的经验。

该错误消息Symbol not found: __ZNK6icu_6114Transliterator12getTargetSetERNS_10UnicodeSetE表示我们正在使用的ICU版本与构建软件包时实际使用的ICU版本之间共享库不匹配的迹象(Mac内置了ICU库/usr/library/libicucore.dylib-我怀疑在构建过程中将其用作默认库)。

因此,我执行以下操作以使用正确的icu lib启动pyicu并运行它:

  1. 使用自制软件(brew remove icu4c和brew install icu4c)删除并重新安装icu4c

  2. 在标准路径(ln -s /usr/local/Cellar/icu4c/61.1/bin/icu-config /usr/local/bin/icu-config)中创建一个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']
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 构建并安装软件包,即python3 setup.py build和python3 setup.py install

注意:如果您以前曾尝试(未成功)构建软件包,请确保build/在重建之前先清除dir 的内容,因为如果构建过程似乎看到目录中填充了文件,则构建过程似乎会跳过新构建文件的创建从以前的版本。