【问题标题】:Import error for icu in Mac and Ubuntu, although pyicu is installed correctlyMac和Ubuntu中icu的导入错误,虽然pyicu安装正确
【发布时间】:2018-05-07 15:02:22
【问题描述】:

我在 MacOS 和 Ubuntu 14.04 中都安装了 pyicu,但它在导入时显示 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

在 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

【问题讨论】:

    标签: python-3.x importerror pyicu


    【解决方案1】:

    在我的 Mac High Sierra 中从源代码构建和安装 pyicu 时,我也有同样的经历。

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

    所以,我做了以下操作来让 picu 启动并使用正确的 icu 库运行:

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

    2. 在标准路径 (ln -s /usr/local/Cellar/icu4c/61.1/bin/icu-config /usr/local/bin/icu-config) 中创建 icu-config 符号链接

    3. 从 repo 克隆 pyicu,编辑 setup.py 文件并在 INCLUDESCFLAGSLFLAGSLIBRARIES 部分下填写“darwin”条目,如下所示:

      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 buildpython3 setup.py install

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

    【讨论】:

    • 问题依旧
    • otool -L /Users/siddharthdas/venvs/chai/lib/python3.6/site-packages/_icu.cpython-36m-darwin.so 的输出是什么?
    • /Users/siddharthdas/venvs/chai/lib/python3.6/site-packages/_icu.cpython-36m-darwin.so: /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 104.1.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.50.4)
    • 似乎它仍然缺少来自 icu4c 的 libicu。请在下面从我的安装中找到相同命令的输出:/usr/local/opt/icu4c/lib/libicui18n.61.dylib (compatibility version 61.0.0, current version 61.1.0) /usr/local/opt/icu4c/lib/libicuuc.61.dylib (compatibility version 61.0.0, current version 61.1.0) /usr/local/opt/icu4c/lib/libicudata.61.1.dylib (compatibility version 61.0.0, current version 61.1.0) /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.50.4)
    • 那么现在该怎么办?
    【解决方案2】:

    在 macOS (64.2) 上针对 python2.7 安装 pycu 最新版本时,我在 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
    

    【讨论】:

      猜你喜欢
      • 2017-04-21
      • 2019-02-17
      • 2014-01-06
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      相关资源
      最近更新 更多