pip install numpy 的问题 - 运行时错误:损坏的工具链:无法链接简单的 C 程序

问题描述 投票:0回答:13

我正在尝试将 numpy (以及 scipy 和 matplotlib)安装到 virturalenv 中。

但我不断收到这些错误:

RuntimeError: Broken toolchain: cannot link a simple C program

----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1

我安装了 xcode 的命令行工具

$ which gcc
/usr/bin/gcc
$ which cc
/usr/bin/cc

我使用的是 Mac OSX 10.9 使用brew安装的python

编辑
是的,正在尝试使用 pip 安装。
整个回溯非常巨大(>400 行)

这是其中的一部分:

C compiler: cc -fno-strict-aliasing -fno-common -dynamic -arch x86_64 -arch i386 -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch x86_64 -arch i386 -pipe



compile options: '-Inumpy/core/src/private -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -Inumpy/core/include -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c'

cc: _configtest.c

clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future]

clang: note: this will be a hard error (cannot be downgraded to a warning) in the future

clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future]

clang: note: this will be a hard error (cannot be downgraded to a warning) in the future

failure.

removing: _configtest.c _configtest.o

Traceback (most recent call last):

  File "<string>", line 17, in <module>

  File "/Users/bdhammel/Documents/research_programming/julia_env/build/numpy/setup.py", line 192, in <module>

    setup_package()

  File "/Users/bdhammel/Documents/research_programming/julia_env/build/numpy/setup.py", line 185, in setup_package

    configuration=configuration )

  File "/Users/bdhammel/Documents/research_programming/julia_env/build/numpy/numpy/distutils/core.py", line 169, in setup

    return old_setup(**new_attr)

  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 152, in setup

    dist.run_commands()

  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands

    self.run_command(cmd)

  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command

    cmd_obj.run()

  File "/Users/bdhammel/Documents/research_programming/julia_env/build/numpy/numpy/distutils/command/egg_info.py", line 10, in run

    self.run_command("build_src")

  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command

    self.distribution.run_command(command)

  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command

    cmd_obj.run()

  File "/Users/bdhammel/Documents/research_programming/julia_env/build/numpy/numpy/distutils/command/build_src.py", line 153, in run

    self.build_sources()

  File "/Users/bdhammel/Documents/research_programming/julia_env/build/numpy/numpy/distutils/command/build_src.py", line 164, in build_sources

    self.build_library_sources(*libname_info)

  File "/Users/bdhammel/Documents/research_programming/julia_env/build/numpy/numpy/distutils/command/build_src.py", line 299, in build_library_sources

    sources = self.generate_sources(sources, (lib_name, build_info))

  File "/Users/bdhammel/Documents/research_programming/julia_env/build/numpy/numpy/distutils/command/build_src.py", line 386, in generate_sources

    source = func(extension, build_dir)

  File "numpy/core/setup.py", line 674, in get_mathlib_info

    raise RuntimeError("Broken toolchain: cannot link a simple C program")

RuntimeError: Broken toolchain: cannot link a simple C program
python numpy virtualenv pip
13个回答
181
投票

对于 Docker (Alpine) 和 Python 3.x,这对我有用:

RUN apk add --update make automake gcc g++ subversion python3-dev

85
投票

虽然丑陋,但似乎有用

sudo ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install --upgrade numpy

请注意,如果您在 numpy 以外的包(例如 lxml)中遇到此错误,请在命令末尾指定该包名称而不是

numpy

我看到有人在安装 gem 时遇到了类似的问题

Ruby Gem 安装 Json 在 Mavericks 和 Xcode 5.1 上失败 - 未知参数:'-multiply_definesuppress'

这只是一个临时修复,在某些时候必须修复编译器选项


19
投票

问题是你无法编译。

首先,请确保您已接受 Xcode 的新条款和条件。为此,只需打开 xCode 并接受即可。

然后,尝试使用

安装 gcc
brew install gcc

最后,尝试使用

安装 Numpy
pip install numpy

希望这有帮助。


10
投票

如果您不想使用 sudo(因此使用 venv 时会保留权限和类似内容),您可以将 ARCHFLAGS 声明添加到 .bash_profile 中,然后正常运行。这对我来说对 Mavericks 和 Xcode 5.1 以及 venv 有用:

在~/.bash_profile中:

导出 ARCHFLAGS=-Wno-error=未使用的命令行参数-未来的硬错误

然后,只需运行命令:

pip install --升级 numpy


8
投票

如果您运行的是 Linux 发行版,则可能需要 C 编译器,尤其是当您看到像

sh: gcc: command not found
这样的明显日志行时。 您可以按照此处的说明进行操作,我将其总结如下:

  • Fedora、Red Hat、CentOS 或 Scientific Linux

    # yum groupinstall 'Development Tools'

  • Debian 或 Ubuntu Linux

    $ sudo apt-get update
     $ sudo apt-get install build-essential manpages-dev

然后你可以尝试重新运行:

sudo pip install numpy

6
投票

就我而言,这发生在 docker 构建期间。问题是基础镜像没有固定到特定的 python 版本,并且 numpy 无法使用新版本进行编译。

FROM python:3-slim  # BAD

我将其更改为以下内容后,它起作用了:

FROM python:3.8-slim  # GOOD

记住修复您的版本! :-)


5
投票

我只需打开 XCode 并接受协议并让它安装工具即可。 然后我回到 PyCharm 并再次安装 numpy,没有任何问题。


5
投票

在 Fedora 22 上,这是通过更新 pip 本身解决的:

sudo pip install --upgrade pip


4
投票

对于遇到类似问题的 Fedora 用户,请尝试安装这些软件包:

(如果不使用 python3,请使用 python-devel 和 pip 而不是 pip3)

sudo dnf install python3-devel
sudo dnf install make automake gcc gcc-c++ gcc-gfortran
sudo dnf install redhat-rpm-config
sudo dnf install subversion

那就试试吧

sudo pip3 install numpy

3
投票

在某些情况下,OS X 升级 XCode 后,XCode 会要求用户(具有管理权限)接受新的许可证。在接受许可证之前,clang 和 gcc 在尝试编译和链接代码时将发出错误。或者至少是 python 包。

如果您启动 XCode 并接受许可证,则不会再出现错误。

至少,对我来说是这样。


2
投票

错误:

运行时错误:工具链损坏:无法链接简单的 C 程序

意味着它要么无法找到您的 C 编译器,要么在链接简单的 C 程序时遇到问题。

演示 docker 演练,让 Python2/pip 消除该错误:

将此演示限制在只读 Docker 映像中,可以帮助我们无所畏惧地发出破坏操作系统的根级别命令,并每次都重新开始:

#download a read only docker image that doesn't have gcc installed:
docker pull frolvlad/alpine-python2

#check the version of pip and python:
docker run --rm frolvlad/alpine-python2 pip --version
#pip 20.3.4 from /usr/lib/python2.7/site-packages/pip (python 

尝试 pip install numpy,你不能,因为 pip 需要 gcc:

docker run --rm frolvlad/alpine-python2 pip install --user numpy
#...
#RuntimeError: Broken toolchain: cannot link a simple C program

gcc 显然没有安装:

docker run --rm frolvlad/alpine-python2 which gcc
#empty output, gcc is not installed

安装它,现在二进制文件 /usr/bin/gcc 已存在:

docker run --rm frolvlad/alpine-python2 sh -c "apk update && apk add make automake gcc g++ subversion python2-dev && which gcc"
#/usr/bin/gcc

对堆叠终端命令表示歉意,但这是一个只读图像,因此每次都必须重做所有内容:

现在 pip 可以使用 gcc 并为 python2 安装 numpy:

docker run --rm frolvlad/alpine-python2 sh -c "apk update && apk add make automake gcc g++ subversion python2-dev && pip install numpy && python -c 'import numpy as np; print(np.__name__, np.__version__)'"
# ...
#Successfully installed numpy-1.16.6
#('numpy', '1.16.6')

我们处于一个好的位置,所以冻结 docker 镜像并重命名它。

docker images
#choose the most recent container id: 751420a548c1:latest and rename it:
docker commit 751420a548c1:latest frolvlad/alpine-python2_numpy

现在你有了一个新的只读 docker 镜像,其中包含 python2、pip 和更新的 1.16.6 numpy,准备好像 2005 年一样运行旧版 python2 软件:

docker run --rm frolvlad/alpine-python2_numpy python -c 'import numpy as np; print(np.__name__, np.__version__)'
#('numpy', '1.16.6')

或者使上述命令更简单和顺序:

-it
上使用
docker run
标志,这意味着从 docker 镜像打开交互式终端:

$ docker run -it frolvlad/alpine-python2_numpy sh
/ > python2 -c 'import numpy as np; print(np.__version__)'
1.16.6
/ > which gcc
/usr/bin/gcc
/ > python2 -c 'import numpy as np; print(np.zeros(3))'
[0. 0. 0.]
/ > echo "headward free now to rise"; exit;

随着 python2 软件包进一步陷入古老的历史,pip 必须配置为指向您的私有 python2 软件包存储库 url。


0
投票

我通过在 Dockerfile 中使用 Conda 而不是 pip 解决了这个问题:

FROM continuumio/miniconda3:latest


-1
投票

旧线程,我的问题是我没有安装 Xcode。下面解决了。

xcode-select --install
© www.soinside.com 2019 - 2024. All rights reserved.