致命错误:安装opencv时未找到“Python.h”文件

31

我正在努力将opencv 3.1安装到我的Mac OS X 10.10.5上的Python中。我按照此处列出的步骤进行操作 - http://www.pyimagesearch.com/2015/06/15/install-opencv-3-0-and-python-2-7-on-osx/

当我在全部设置完成后试着安装opencv时,我遇到了以下错误:

.../opencv/modules/python/src2/cv2.cpp:6:10: fatal error: 
  'Python.h' file not found
 #include <Python.h>
          ^

我在 StackOverflow 上看到大多数遇到这个问题的人都是使用 Anaconda,但我的情况并非如此。如果有人能指导我正确解决这个问题,那就太好了。

谢谢。


3
搜索如何在OSX上安装python-dev - Ashwini Chaudhary
我已经完成了所有的操作 - XCode命令行、Brew、Python、Virtualenv。同时在bash_profile中设置了PATH。我有遗漏什么吗? - Sumanth
2
你需要设置C_INCLUDE_PATH,请尝试这个 -> https://dev59.com/CYDba4cB1Zd3GeqPKe7V#47956013 - Aayush Gautam
11个回答

25

如果在制作*.cpp文件时找不到Python.h文件,则设置以下环境变量

export CPLUS_INCLUDE_PATH=/System/Library/Frameworks/Python.framework/Headers
请检查您的系统中路径是否存在,并确保Python.h文件存在。

1
export C_INCLUDE_PATH=/System/Library/Frameworks/Python.framework/Versions/2.7/Headers/ 对我有效。 - Jeff Bezos
这里有一些有用的笔记,以防我再次遇到这个问题:
  1. PYTHON_DEFAULT_EXECUTABLE 设置为感兴趣的 Python 版本是有用的。
  2. 同样,将 PYTHONPATHPYTHON_INCLUDE_DIR 设置为该 Python 的 include 目录可能会有帮助。
  3. 在每种情况下使用 CPLUS_INCLUDE_PATH + C_INCLUDE_PATH,在 MacOS 上用 : 分隔多个目录(不确定其他操作系统)如果你需要包含其他头文件,例如 numpy。 最后,别忘了在安装命令中加上 -v 以获取构建输出。
- toofarsideways

15

我使用的是El Capitan,但我不认为Python头文件的路径会有太大的差异。我找到我的头文件在:

/System/Library/Frameworks/Python.framework/Headers/Python.h

你可以尝试运行:

export C_INCLUDE_PATH=/System/Library/Frameworks/Python.framework/Headers

然后尝试剩下的步骤。


CPLUS_INCLUDE_PATH被用在了被接受的答案中,但是对我都没有起作用。 - user1689987
MacOS - C_INCLUDE_PATH 可以工作,CPLUS... - 不可以。 - Constantine Kurbatov
1
C_INCLUDE_PATH 对我起作用,CPLUS_INCLUDE_PATH 没有。供参考,在尝试为 Greenlet 构建 wheel 的 M1 Mac 上。 - kaladin

9

这个问题似乎涉及到默认的Python2集成在macOS中,其中Python.h头文件位于以下地址:

/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/Python.h

取决于您使用的 macOS 版本,Python 版本可能会发生变化。然而,如果您使用 Homebrew 安装了 Python3,则可能会在以下路径中找到头文件:

/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/include/python3.7m/Python.h

根据你的brew安装的Python3版本不同,可能会有所不同。当然,在Mac上获取Python的方式还有很多其他选择(例如anaconda、intel python、pypy等)。找到特定的Python.h路径的最佳方法是通过以下方式在整个设备中搜索:

sudo find / -iname "Python.h"

然后您可以运行该命令。

export C_INCLUDE_PATH="<path/to/the/specific/header/folder>"

在你的bash终端中,或将其添加到~/.bash_profile中以永久存在。
你可能还需要检查MakeFile(或软件使用的其他工具,例如cmake...),以查看它所期望的Python.h版本及其位置。

如何将其添加到CMake中?我仍然无法构建。 - Shravya Boggarapu
@ShravyaBoggarapu 抱歉,但这篇文章是很久以前的了。我认为你应该研究一下CMake的“FindPython”。例如在这里 - Foad S. Farimani

7

运行

brew install python

或者

brew upgrade python

在执行此操作后,您想要安装的所有内容(例如vim)都将成功安装。


这是我需要的线索。由于某些原因,我在brew之外安装了Python 3.8。使用brew进行安装并将其作为我的virtualenv基础可以解决我的问题。 - Jonas D

3

我在OSX上遇到了同样的问题,通过设置CPLUS_INCLUDE_PATH环境变量得以解决。 同时我也在Anaconda环境中构建代码,这可能会使事情变得更加复杂。

export CPLUS_INCLUDE_PATH=~/anaconda/envs/py27/include/python2.7

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=~/anaconda/envs/py27/share \
    -D PYTHON2_PACKAGES_PATH=~/anaconda/envs/py27/lib/python2.7/site-packages \
    -D PYTHON2_LIBRARY=~/anaconda/envs/py27/bin/python \
    -D PYTHON_EXECUTABLE=~/anaconda/envs/py27/bin/python \
    -D PYTHON2_INCLUDE_DIR=~/anaconda/envs/py27/include/python2.7 \
    -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON \
    -D BUILD_EXAMPLES=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules ..

谢谢,它也适用于我的情况,我的虚拟环境是由pyenv提供的。 - Asmoox

3
我在mac os 12.2.1上解决了这个问题,步骤如下: export CPPFLAGS="-I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7" 然后执行pip install ...

2
我花了几个小时来解决这个错误,但是这个答案帮我解决了问题! - Saransh
我本以为一个活跃的 venv 应该包含或链接到所需的 Python 头文件,但实际上并没有。相反,这些文件可以在 /usr/local/Cellar/python@3.8/3.8.6/Frameworks/Python.framework/Versions/3.8/include/python3.8 中找到。 - eliangius
1
谢谢,这解决了我的问题!对于那些使用 pyenv 的人,您可以通过 pyenv prefix 获取头文件的位置,然后附加剩余路径。在我的情况下,我必须设置 export CPPFLAGS="-I$HOME/.pyenv/versions/3.9.16/include/python3.9" - Stan

1

首先,您需要检查并确保您已经使用brew安装了Python,并且正在使用系统Python库二进制文件。这在博客中已经提到。

其次,在cmake命令中使用的Python版本必须与brew为您安装的版本匹配。您应该仔细检查。


0

我通过安装Python 2.7 来解决问题,显然之前是使用 Python 3.4 进行编译。因此我执行了以下操作:

brew install python@2
brew link python@2

0

我的方法有所不同,但基本上与Jonathan Lau提到的相同。

我使用了pyenv和conda,并更改了我的Python库路径,这导致了问题。 为了解决它,这是我所做的:

  1. 在.bashrc中注释掉pyenv的PATH设置
  2. 重新启动终端并安装你需要的任何东西(在我的情况下是vim)
  3. 将.bashrc改回来

0

是的,请修改cmake命令中使用的路径。它们必须存在于您的文件系统中。在我的情况下,我已经安装了Python 3.5,而原始文档使用的是Python 3.4。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接