pip install numpy 的问题 - RuntimeError: Broken toolchain: 无法链接简单的 C 程序

2025-02-28 08:24:00
admin
原创
42
摘要:问题描述:我正在尝试将 numpy(以及 scipy 和 matplotlib)安装到 virturalenv 中。但我不断收到这些错误:RuntimeError: Broken toolchain: cannot link a simple C program ----------------------...

问题描述:

我正在尝试将 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

解决方案 1:

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

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

解决方案 2:

虽然丑陋,但似乎有效

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

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

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

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

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

解决方案 3:

问题是您无法编译。

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

然后尝试使用以下命令安装 gcc

brew install gcc

最后,尝试使用以下方法安装 Numpy

pip install numpy

希望这有帮助。

解决方案 4:

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

在〜/ .bash_profile中:

导出 ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future

然后,只需运行命令:

pip 安装--升级 numpy

解决方案 5:

如果你正在运行 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

记得修复你的版本!:-)

解决方案 7:

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

解决方案 8:

在 Fedora 22 上,通过更新 pip 本身解决了这个问题:
sudo pip install --upgrade pip

解决方案 9:

对于遇到类似问题的 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

解决方案 10:

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

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

至少,对我来说是这样的。

解决方案 11:

错误:

RuntimeError:工具链损坏:无法链接简单的 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。

解决方案 12:

我通过在 Dockerfile 中使用 Conda 代替 pip 解决了这个问题:
FROM continuumio/miniconda3:latest

解决方案 13:

旧帖子,我的问题是我没有安装 Xcode。下面解决了它。

xcode-select --install
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1590  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1361  
  信创产品在政府采购中的占比分析随着信息技术的飞速发展以及国家对信息安全重视程度的不断提高,信创产业应运而生并迅速崛起。信创,即信息技术应用创新,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。政府采购作为推动信创产业发展的重要力量,其对信创产品的采购占比情况备受关注。这不仅关系到信创产业的发展前...
信创和国产化的区别   18  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。近年来,国货国用信创发展势头迅猛,在诸多领域取得了显著成果。这一发展趋势对科技创新产生了深远的推动作用,不仅提升了我国在信息技术领域的自主创新能力,还为经济社会的数字化转型提供了坚实支撑。信创推动核心技术突破信创产业的发展促使企业和科研...
信创工作   18  
  信创技术,即信息技术应用创新产业,旨在实现信息技术领域的自主可控与安全可靠。近年来,信创技术发展迅猛,对中小企业产生了深远的影响,带来了诸多不可忽视的价值。在数字化转型的浪潮中,中小企业面临着激烈的市场竞争和复杂多变的环境,信创技术的出现为它们提供了新的发展机遇和支撑。信创技术对中小企业的影响技术架构变革信创技术促使中...
信创国产化   19  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用