簡體   English   中英

盡管pyicu已正確安裝,但Mac和Ubuntu中icu的導入錯誤

[英]Import error for icu in Mac and Ubuntu, although pyicu is installed correctly

我在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

在Mac High Sierra中從源代碼構建和安裝pyicu時,我有相同的經驗。

錯誤消息Symbol not found: __ZNK6icu_6114Transliterator12getTargetSetERNS_10UnicodeSetE錯誤Symbol not found: __ZNK6icu_6114Transliterator12getTargetSetERNS_10UnicodeSetE是我們使用的ICU版本與構建軟件包時實際使用的ICU版本之間共享庫不匹配的標志(Mac在/usr/library/libicucore.dylib內置了ICU庫-我懷疑在構建過程中將其用作默認設置)。

因此,我執行以下操作以使用正確的icu lib啟動pyicu並運行它:

  1. 使用自制軟件刪除並重新安裝icu4c( brew remove icu4cbrew 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文件,並填寫“達爾文”下的條目INCLUDESCFLAGSLFLAGSLIBRARIES部分如下:

     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/目錄的內容,因為如果編譯過程看到目錄已填充,則似乎會跳過創建新構建文件的過程與以前的版本中的文件。

當針對python2.7在macOS(64.2)上安裝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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM