安装 pip pyicu 时出错

Posted

技术标签:

【中文标题】安装 pip pyicu 时出错【英文标题】:Error installing pip pyicu 【发布时间】:2017-04-17 20:02:47 【问题描述】:

我一直在尝试在我的 Mac 上安装 musicbrainz 服务器,并且有一个步骤是我必须安装 pip pyicu。我不断收到此错误:

Collecting pyicu
Downloading PyICU-1.9.5.tar.gz (181kB)
100% |████████████████████████████████| 184kB 515kB/s 
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/private/tmp/pip-build-E50o2C/pyicu/setup.py", line 11, in <module>
    ICU_VERSION = subprocess.check_output(('icu-config', '--version')).strip()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 566, in check_output
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/tmp/pip-build-E50o2C/pyicu/

我已尝试下载 ez_setup.py 并执行 python ez_setup.py。我已经升级了 setuptools 并分别下载了它们。我不确定还有什么可以尝试的。请帮忙!

【问题讨论】:

musicbrainz服务器是用Perl写的,哪一部分让你尝试安装pyicu? 我不断收到此错误:致命错误:尝试 make 命令后未找到“unicode/utypes.h”文件。之后我尝试 pip install polyglot,但随后我得到命令“python setup.py egg_info”失败,错误代码为 1。我只需要解决第一个错误,但我尝试了很多选项,我相信 pyicu 是一个尝试. 在命令行中运行:export PYICU_CFLAGS=-std=c++11:-DPYICU_VER='"2.0.3"' 为我工作。 【参考方案1】:

我在 ubuntu 14.04 和 16.04 上遇到了这个问题。要解决此问题,请安装 libicu-dev 然后再次尝试安装。我做了

$sudo apt install libicu-dev
$pip install pyicu

【讨论】:

这个实际上在我的 Ubuntu 机器上帮助了我!!谢谢@Mungai @StevenYong,为此苦苦挣扎,很高兴知道它对您也有帮助。【参考方案2】:

我在我的 Mac 上尝试安装 polyglot 时遇到了这个问题(polyglot 需要 pyicu)。以下为我解决了这个问题。

# Install icu
brew install icu4c

# check newest version
ls /usr/local/Cellar/icu4c/

# Edit pyicu installer to work
git clone https://github.com/ovalhub/pyicu.git

# edit setup.py not to query for the version, i.e. change
# ICU_VERSION = subprocess.check_output(('icu-config', '--version')).strip()
# to whatever your version is, e.g.
# ICU_VERSION = '57.1'

# Install pyicu
env LDFLAGS=-L/usr/local/opt/icu4c/lib CPPFLAGS=-I/usr/local/opt/icu4c/include DYLD_LIBRARY_PATH=-L/usr/local/opt/icu4c/lib python setup.py build
env LDFLAGS=-L/usr/local/opt/icu4c/lib CPPFLAGS=-I/usr/local/opt/icu4c/include DYLD_LIBRARY_PATH=-L/usr/local/opt/icu4c/lib sudo python setup.py install

# Change DYLD_LIBRARY_PATH (not sure if req'd)
DYLD_LIBRARY_PATH=/usr/local/Cellar/icu4c/version, e.g. 57.1/:$DYLD_LIBRARY_PATH
echo $DYLD_LIBRARY_PATH

# Icu works now from python, and you can proceed with polyglot
$ python
>>> import icu
$ pip install polyglot
$ python
>>> import polyglot

【讨论】:

我正在尝试上传到 Heroku,如何按照这些步骤使用 Aptfile 规避 PyICU 错误?【参考方案3】:

让我让它工作:

1) 使用 brew 安装 icu4c

brew install icu4c
brew link icu4c --force

2) 检查版本:

ls /usr/local/Cellar/icu4c/

它会提示类似: 64.2

3) 执行以下命令,替换上一步中的正确版本(第一行只有整数部分,第二行和第三行有小数部分):

export ICU_VERSION=64
export PYICU_INCLUDES=/usr/local/Cellar/icu4c/64.2/include
export PYICU_LFLAGS=-L/usr/local/Cellar/icu4c/64.2/lib

4) 最后为pyicu安装python包:

pip install pyicu --upgrade

如果您在上述情况下失败(在 OS X 10.15 上已经发生在我身上),您可能需要:

brew install pkg-config

export PYICU_CFLAGS=-std=c++11:-DPYICU_VER='"2.3.1"'

【讨论】:

以下步骤 1-4 对我不起作用。我必须安装pkg-config 并导出PYICU_CFLAGS,它对我有用。【参考方案4】:

在 macOS 10.14.2 上,只需将包含 icu-config 的目录添加到 PATH 就可以了:

brew install icu4c
export PATH="/usr/local/opt/icu4c/bin:$PATH"
pip install pyicu

其实这是brew info icu4c建议的:

==> Caveats
icu4c is keg-only, which means it was not symlinked into /usr/local,
because macOS provides libicucore.dylib (but nothing else).

If you need to have icu4c first in your PATH run:
  echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.zshrc
  echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"' >> ~/.zshrc

For compilers to find icu4c you may need to set:
  export LDFLAGS="-L/usr/local/opt/icu4c/lib"
  export CPPFLAGS="-I/usr/local/opt/icu4c/include"

For pkg-config to find icu4c you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"

【讨论】:

【参考方案5】:

以下解决方案仅适用于 MAC OSX-

尝试使用 brew 安装 pyICU:

brew install icu4c

如果它说它已经安装并且只需要链接,那么试试这个:

brew link icu4c

这会在“/usr/local/Cellar/icu4c/...”中创建相对符号链接

【讨论】:

谢谢,对我有用的是:brew link --force icu4c 然后安装 pyICU,然后 brew unlink icu4c 以避免在构建依赖于 mac 的 lib 版本的软件时发生冲突。 mac os 10.13.6 : "brew install icu4c" 然后 "brew link --force icu4c" 为我工作【参考方案6】:

以下解决方案在 OSX 上对我有用:

# Install ucu4c via Brew
brew install icu4c

# Create relative symlinks for icu4c
brew link --force icu4c

# Install pyicu via pip
# Make sure ICU_VERSION matches the one you just installed
sudo ICU_VERSION=60.2 pip install pyicu

【讨论】:

+1 这对我来说实际上也适用于 Sierra。甚至与 brew 的强制链接也不起作用 - 明确告诉选择哪个版本!谢谢。【参考方案7】:

似乎为brew 打包的icu4c 的当前版本没有正确链接icu-config 文件。

运行brew link icu4c --force 为您提供了解决此问题的必要信息,但无法自动链接它。

$ brew link --force icu4c
Warning: Refusing to link macOS-provided software: icu4c
If you need to have icu4c first in your PATH run:
  echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.bash_profile
  echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"' >> ~/.bash_profile

For compilers to find icu4c you may need to set:
  export LDFLAGS="-L/usr/local/opt/icu4c/lib"
  export CPPFLAGS="-I/usr/local/opt/icu4c/include"

For pkg-config to find icu4c you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"

您需要在安装icu4cbrew 后运行以下命令以将icu-config 放入您的路径(假设您将bash 作为shell 运行):

echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile

之后,您应该可以安装pyicu,而无需任何额外的环境变量:

$ pip install --no-cache-dir pyicu
Collecting pyicu
  Downloading https://files.pythonhosted.org/packages/c2/15/0af20b540c828943b6ffea5677c86e908dcac108813b522adebb75c827c1/PyICU-2.2.tar.gz (211kB)
    100% |████████████████████████████████| 215kB 4.9MB/s 
Installing collected packages: pyicu
  Running setup.py install for pyicu ... done
Successfully installed pyicu-2.2

总之,这是我为完成这项工作而运行的命令的完整列表:

brew install icu4c
brew link icu4c --force
echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
pip install --no-cache-dir pyicu

(顺便说一句,我遇到的许多解决方案都没有使用--no-cache-dir 选项和pip install。我认为其中一些可能已经缓存了pyicu 的构建版本。我做了一段时间,这掩盖了这个问题。直到我尝试了这个选项,我才能够正确地重现和修复。)

【讨论】:

【参考方案8】:

这失败了,因为icu4c 是一个仅限小桶的公式,您可以在brew info icu4c 的注意事项部分看到。

其他一些答案建议使用brew link icu4c,但这可能导致其他问题,因为 macOS 已经提供了libicucore.dylib

pip install pyicu 失败是因为

将尝试运行icu-config 命令,因此icu-config 必须在PATH 中 将尝试运行pkgconfig ... icu-i18n,因此icu4c 的.pc 文件必须在PKG_CONFIG_PATH

对于 macOS,如果您不想 brew link icu4c 并且只想让 icu4c 可用于您的 pip install 命令,那么您可以这样做:

brew install pkg-config icu4c

# brew info icu4c 
export PATH="/usr/local/opt/icu4c/bin:$PATH"
export PATH="/usr/local/opt/icu4c/sbin:$PATH"
export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"

icu-config --version # 68.2
pkg-config --modversion icu-i18n # 68.2

pip install pyicu==2.6.0 # works because icu-config in PATH and pkgconfig can find icu4c

【讨论】:

【参考方案9】:

我试图在 RHEL 中安装,我是从 tar.gz 文件安装的。 以下是命令:

    /usr/local/bin/pip3 install -U setuptools
    /usr/local/bin/pip3 install -U wheel
    wget http://download.icu-project.org/files/icu4c/50.1.2/icu4c-50_1_2-src.tgz
    tar -zxvf icu4c-50_1_2-src.tgz
    cd icu
    cd source
    sudo ./configure --prefix=/usr
    sudo make
    sudo make install
    icu-config --version
    /usr/local/bin/pip3 install PyICU==2.0.6

【讨论】:

以上是关于安装 pip pyicu 时出错的主要内容,如果未能解决你的问题,请参考以下文章

通过 pip 安装 gnureadline 时出错

尝试在 openSUSE 上安装 pip 时出错

使用 pip 安装 Dlib 时出错

当我尝试使用 pip 安装 Dlib 时出错。苹果系统

使用 pip in 安装 streamlit 时出错

使用 pip 安装 face_recognition 模块时出错