【问题标题】:SciPy build/install Mac OsxSciPy 构建/安装 Mac Osx
【发布时间】:2013-01-27 02:17:03
【问题描述】:

我在我的 mac os x 上成功地为 python 2.7.3 构建/安装了 NumPy。 现在我也想构建/安装 scipy。我是从 git hub 下载的。 进了目录。运行 python setup.py build ,它似乎可以正常工作,直到遇到此错误:

customize Gnu95FCompiler
Could not locate executable gfortran
Could not locate executable f95
customize NAGFCompiler
customize AbsoftFCompiler
Could not locate executable f90
Could not locate executable f77
customize IBMFCompiler
Could not locate executable xlf90
Could not locate executable xlf
customize IntelFCompiler
Could not locate executable ifort
Could not locate executable ifc
customize GnuFCompiler
Could not locate executable g77
customize G95FCompiler
Could not locate executable g95
customize PGroupFCompiler
Could not locate executable pgfortran
don't know how to compile Fortran code on platform 'posix'
building 'dfftpack' library
error: library dfftpack has Fortran sources but no Fortran compiler found

我以为我已经为 NumPy 安装了 Fortran...你猜不是吗?怎么下载?

【问题讨论】:

  • 您需要最新版本吗?为什么不使用 easy_install 或 pip?
  • 我在安装 NumPy 时尝试了 pip,但我很困惑,我下载了自制软件,之后 Numpy 就可以工作了。
  • 让我说:如果你打算用 Python 做任何事情,你可能想弄清楚。
  • 您使用的是 Apple 预装的 Python,还是其他的(python.org、Homebrew 等)?不同情况下的答案是不同的(尽管我很确定每种情况都有一个 dup)。
  • 另外,您是否真的需要从其他来源安装的 Python 2.7.3,而不是 Apple 预装的 2.7.2?因为如果你卸载它并在你的道路上只使用一个 Python 2.7,生活会轻松很多。

标签: python macos python-2.7 fortran scipy


【解决方案1】:

您的问题是您需要安装 Fortran 编译器来构建 scipy

另外,如果您已经有一个在禁用 Fortran 支持的情况下构建的 numpy,您可能需要替换它。 Apple 的一些预装 Python 版本预装了这样的 numpy 构建。


获取 Fortran 的最简单方法是使用 Homebrew。正如the docs 所说,您需要先安装 Xcode 及其命令行工具。 (安装命令行工具的方式几乎随 Xcode 的每个主要版本而变化,因此请参阅链接文档以获取最新说明。)然后安装 Homebrew。安装 URL 已经更改了几次,所以请查看 Homebrew 主页或安装说明(http://brew.sh/),但会是这样的:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然后:

brew install gcc

(请注意,直到 2014 年的某个时间,gfortrangcc 是一个单独的配方,所以命令是 brew install gfortran。但如果你现在尝试,你会得到一个错误,说“GNU Fortran is现在作为 GCC 的一部分提供,并且可以通过以下方式安装:brew install gcc"。)


您确实想使用pip 来安装scipy,所以如果您没有,请先获取它。 Apple 预装的 Python,至少在 10.7 和 10.8 中,包括 easy_install 但不包括 pip,所以最简单的方法是:

sudo easy_install pip

但是,您可能需要考虑使用 virtualenv 而不是全局安装(在这种情况下,您还需要在以下命令中删除 sudo)。

现在你已经有了gfortranpip,你所要做的就是:

sudo pip install --upgrade numpy
sudo pip install scipy

注意事项:

  • 以上说明适用于 Apple 预安装的 Python 版本。如果你使用的是不同版本的 Python,你真的应该考虑不这样做。保持路径、安装的包等同步是一场噩梦。例外情况是如果您想要 Python 3.x 版本,在这种情况下,从 python.org 或 Homebrew 安装它是完全合理的。不会有冲突,因为pythonpip2.7等会针对苹果的Python; python3pip3.3 等用于 3.x 版本。

  • 如果您已经拥有pip,但担心它可能已经过时,pip install --upgrade pip。 (除了安全性和稳健性优势之外,这还可以让您与某些科学堆栈或其他模块的二进制轮子兼容,从而为您节省大量时间。)

  • 对于大多数非 Apple Python 安装(甚至可能是 Apple 的 10.9 或 10.10;我还没有检查过),您应该使用easy_install 来安装pip。关注pip install instructions。但首先要确保你还没有它。

    • 如果您使用的是virtualenv/venv,则您的虚拟环境将已经包含pip
    • Python 3.4 或更高版本可能(并且将,如果来自 python.org 安装程序)包含pip bootstrap。如果您的 3.4+ 还没有pip,您可能需要python -m ensurepip 来安装它。
    • 一些第三方安装,如 Homebrew 或 ActiveState,包括 pip
  • 对于 Python 3.3 或更高版本,您可能需要使用内置的 venv 而不是 virtualenv

  • 1234563重建 Python 和 GCC)。
  • Enthought 和 ActiveState 等第三方二进制安装可能已经包含 scipy 以及您需要的所有其他内容。如果不是,说明基本同上,但你得猜想跳过或遵循哪些步骤,是否到sudo等。


如果您使用的是 Python 2.7 的非 Apple 版本,并且想要避免 PATH 问题,您必须做两件事:

首先,永远不要在多个 Python 中安装任何包含脚本或二进制文件(包括 pip 本身)的 Python 包。例如,如果您为 Apple 2.7 和 Homebrew 2.7 安装 ipython,两者都将尝试创建名为 /usr/local/bin/ipython/usr/local/bin/ipython-2.7 的脚本。如果幸运的话,一次安装将失败。否则,它们都会成功,其中一个最终会覆盖另一个,而您将无法运行覆盖的版本。

其次,确保备用 Python 脚本和二进制文件的路径位于 Apple 的 PATH 之前。根据您安装的备用 Python 以及您遵循的说明,这可能是:

  • /usr/local/bin
  • /Library/Frameworks/Python.framework/Versions/2.7/bin
  • /usr/local/share/python2.7/bin
  • /usr/local/Cellar/python/2.7.3/bin
  • 别的东西

无论路径是什么,您都需要编辑 PATH 变量。

如果您想影响 GUI 应用程序(和 LaunchAgent 等),显然不再有支持的方式来执行此操作,但已弃用的 QA1067 似乎在 Lion 中仍然有效。这也是 Homebrew FAQPython FAQ 所建议的。

如果您只关心命令行会话(Terminal.app 和远程 ssh),您可以改为只执行标准 Unix 操作,即编辑相应的配置文件。哪个配置文件适合取决于您想要影响的内容。 (所有用户还是只有一个用户?bash 或任何 shell?等等。)如果你不知道你想要哪一个,你真的应该做一些研究。如果您不想费心学习,只需~/.profile,如果不是您想要的,请不要抱怨。

无论哪种方式,您都需要确保适当的路径位于 PATH 中的 /usr/bin 之前。因此,例如,您可以将以下内容添加到~/.profile

PATH=/usr/local/bin:$PATH
export PATH

(在它生效之前,您当然需要创建一个新的终端 shell,或者获取脚本。)

如果您使用的是homebrewbrew doctor 会告诉您是否正确。

【讨论】:

  • 非常有用的帖子,一直避免在我的笔记本电脑上本地安装 scipy,直到现在,他们在 scipy 网站上做广告的方式(使用 macports)对我来说失败了,但效果很好
  • 安装fortran编译器的命令现在是brew install gcc
  • @jjfine:现在是这样,但 21 个月前提问者提出这个问题时,情况并非如此。 (但我会为未来的读者更新答案。)
  • @jjfine:我更新了各种过时的链接、URL、版本号等。
  • 我知道我可以将您的答案与 brew 一起使用来解决问题(或者我希望我可以),但是如果我单独安装 pip3 numpy,为什么 fotran 编译器不存在?就像我做的pip3 install numpy 一样,它仍然说找不到 fotrand 编译器。
【解决方案2】:

看起来您的实际问题只是 Sourceforge 的间歇性下载失败:

curl: (33) HTTP server doesn't seem to support byte ranges. Cannot resume. Error: Download failed: downloads.sf.net/project/machomebrew/Bottles/…

如果您再次尝试brew install gfortran,Homebrew 应该会自动从该错误中恢复。所以,这是首先要尝试的。

如果这不起作用,请查看brew doctor 是否发现任何问题,然后brew install -d gfortran 以查看将部分下载的文件存储在何处,以便您可以手动将其删除并重试。

如果一切都失败了,您可以使用--build-from-source 强制它不使用瓶子。当然,从源代码构建比安装二进制瓶子要花更长的时间,但它应该给出相同的结果。

【讨论】:

    【解决方案3】:

    截至 2014 年 5 月 20 日,如果您使用的是 brew,则 Fortran 将作为 gcc 的一部分安装。不需要单独的 Fortran 包。以下是我安装 numpy 的方法:

    1. 按照 abamert 的回答安装 brew(或参见 http://brew.sh/
    2. 安装 gcc (brew install gcc)
    3. 确认 brew 的 gcc 是正确的(which gcc 应该指向 /usr/local/bin/gcc)
    4. export ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future(见Problems with pip install numpy - RuntimeError: Broken toolchain: cannot link a simple C program
    5. pip install numpy

    【讨论】:

      【解决方案4】:

      我觉得这个问题一点也不复杂。

      1) 安装 pip

      cd /Library/Frameworks/Python.framework/Versions/ ln -s 2.7 当前

      cd /usr/bin rm -f 蟒蛇 ln -s /Library/Frameworks/Python.framework/Versions/Current/bin/python python

      2) 从https://pypi.python.org/pypi/setuptools#files下载egg sudo sh setuptools-0.6c11-py2.7.egg

      3) 只需从此链接下载并安装 gfotran: http://r.research.att.com/tools/

      4) 之后,您需要输入: sudo pip install -U scipy sudo pip install -U numpy sudo pip install -U matplotlib

      希望你应该拥有你想要的一切。

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题,使用以下步骤:
        1. 酿造安装 gfortran
        2. pip install scipy

        那没关系。

        【讨论】:

        • 在撰写本文时将其设为 brew install gcc
        【解决方案6】:

        我安装了 gfortran,二进制文件是 gfortran-4.2。因此,每次我尝试安装 SciPy 时都找不到编译器,因为它试图使用 gfortran

        我所做的是创建一个 gfortran-4.2gfortran 的符号链接。

        要找到应该在哪里创建符号链接运行:

        $ which gfortran-4.2
        /usr/local/bin/gfortran-4.2
        

        然后符号链接它:

        ln -s /usr/local/bin/gfortran-4.2 /usr/local/bin/gfortran
        

        【讨论】:

          【解决方案7】:

          对于 OSX yosemite 和可能更旧的 osx 版本,您可能需要在运行 pip install scipy 之前下载并安装 fortran 编译器。要下载最新的 fortran 编译器,只需转到以下链接:

          https://gcc.gnu.org/wiki/GFortranBinaries#MacOS

          【讨论】:

            【解决方案8】:

            我认为您的 Xcode 和 OSX 版本很重要。我有 Xcode: 6.4 和 Os X 10.11.1 并且仍然收到相同的错误消息(找不到 gfortran 等)。我尝试了很多东西,包括@abarnert 的彻底回应,但我的解决方案是升级 Xcode(到 7.1.1)。

            【讨论】:

              【解决方案9】:

              我已经安装了 homebree,所以我要试试:$brew install gfortran 希望这有效

              【讨论】:

              • 你用 Python 酿造了吗?如果是这样,您将免费获得点子……听起来您也使用的是 Mac。在这种情况下,我认为你可以从 XCode 中获取 Fortran 编译器。
              • 是的,我在我的 python 上进行了 brew,我已经使用 pip 有一段时间了。我用它来安装 Django,我只是有一段时间没有使用它。是的,我刚刚让 Xcode 仍在努力学习如何导航和使用它。我最终会弄明白的,有很多不同的组件可供使用。
              • 尝试使用 brew 下载 Fortran 得到此错误:curl: (33) HTTP 服务器似乎不支持字节范围。无法恢复。错误:下载失败:downloads.sf.net/project/machomebrew/Bottles/…
              • 是的---我认为你至少需要命令行工具。我认为您可以使用 Command + , -> Downloads 安装它。
              • Xcode 的命令行工具?我昨晚在 Xcode->preferences->downloads->components->command line tools 中安装了它,我需要再走一步吗?
              【解决方案10】:

              以下是在 OSX 10.7 上进行全新安装的详细说明。如果我是你,我会走这条路,而不是尝试自己下载和构建源代码。

              http://www.thisisthegreenroom.com/2011/installing-python-numpy-scipy-matplotlib-and-ipython-on-lion/

              【讨论】:

              • 该页面在顶部明确指出它已过时。它还建议使用 Homebrew 与 Apple 一起安装另一个 Python 2.7,Homebrew 特别建议不要这样做。它需要手动破解 PATH 和链接。总的来说,我认为这不是一个好的答案。
              • 什么。她已经安装了python,除了说明似乎与您发布的内容大致相同。
              • 除非您只是希望“或多或少”安装 scipy 并且不需要它来实际工作,例如,“whatevs”不是一个很有帮助的态度。我的建议和那篇文章的建议之间存在一些显着差异,如果你无法分辨出差异(或者如果你太懒了,只是 tl;dr 整件事),你将无法帮助遇到问题的人(任何关注该页面的人都会)。
              • 这些与我用来安装 Python scipy 和 numpy 的指令完全相同,我几乎每天都在使用它们,没有任何问题 --- 我将她引导到我认为有用的资源。当我认为安装非 Apple 版本的 Python 是个好主意时,我不认为只有我一个人在 stackoverflow 上。所以,真的……不管怎样,要么接受,要么离开。
              • 我不应该做出如此消极的回应——抱歉@abarnert。
              猜你喜欢
              • 2013-01-25
              • 1970-01-01
              • 1970-01-01
              • 2019-01-25
              • 2018-03-18
              • 2012-07-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多