我正在尝试将 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
对于 Docker (Alpine) 和 Python 3.x,这对我有用:
RUN apk add --update make automake gcc g++ subversion python3-dev
虽然丑陋,但似乎有用
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'
这只是一个临时修复,在某些时候必须修复编译器选项
问题是你无法编译。
首先,请确保您已接受 Xcode 的新条款和条件。为此,只需打开 xCode 并接受即可。
然后,尝试使用
安装 gccbrew install gcc
最后,尝试使用
安装 Numpypip install numpy
希望这有帮助。
如果您不想使用 sudo(因此使用 venv 时会保留权限和类似内容),您可以将 ARCHFLAGS 声明添加到 .bash_profile 中,然后正常运行。这对我来说对 Mavericks 和 Xcode 5.1 以及 venv 有用:
在~/.bash_profile中:
导出 ARCHFLAGS=-Wno-error=未使用的命令行参数-未来的硬错误
然后,只需运行命令:
pip install --升级 numpy
如果您运行的是 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
就我而言,这发生在 docker 构建期间。问题是基础镜像没有固定到特定的 python 版本,并且 numpy 无法使用新版本进行编译。
FROM python:3-slim # BAD
我将其更改为以下内容后,它起作用了:
FROM python:3.8-slim # GOOD
记住修复您的版本! :-)
我只需打开 XCode 并接受协议并让它安装工具即可。 然后我回到 PyCharm 并再次安装 numpy,没有任何问题。
在 Fedora 22 上,这是通过更新 pip 本身解决的:
sudo pip install --upgrade pip
对于遇到类似问题的 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
在某些情况下,OS X 升级 XCode 后,XCode 会要求用户(具有管理权限)接受新的许可证。在接受许可证之前,clang 和 gcc 在尝试编译和链接代码时将发出错误。或者至少是 python 包。
如果您启动 XCode 并接受许可证,则不会再出现错误。
至少,对我来说是这样。
运行时错误:工具链损坏:无法链接简单的 C 程序
意味着它要么无法找到您的 C 编译器,要么在链接简单的 C 程序时遇到问题。
将此演示限制在只读 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。
我通过在 Dockerfile 中使用 Conda 而不是 pip 解决了这个问题:
FROM continuumio/miniconda3:latest
旧线程,我的问题是我没有安装 Xcode。下面解决了。
xcode-select --install