

brewで、opencv2をインストールしたのですが、python上でimportしようとすると、下記エラーが出てしまいます。

ちなみに、私の環境は以下のとおりです：  
python version: 3.6.0  
Mac OS version: 10.12.3

[code]

    File "<stdin>", line 1, in <module> ImportError:
    dlopen(/Users/togokida/.pyenv/versions/3.6.0/lib/python3.6/site-packages/cv2.so,
    2): Symbol not found: _PyCObject_Type   Referenced from:
    /Users/togokida/.pyenv/versions/3.6.0/lib/python3.6/site-packages/cv2.so
    Expected in: flat namespace  in
    /Users/togokida/.pyenv/versions/3.6.0/lib/python3.6/site-packages/cv2.so
    
[/code]

インストールしたopencvがpythonとうまくリンクできてないのかな…という気はしており、ネットにあるブログを幾つか参考にしてみたものの、うまく行かず…。お力をお借りできれば幸いです。


CC BY-SA 3.0
2017-03-07T02:53:45.940
33156
2017-03-13T08:05:56.150
2017-03-07T04:48:10.400
9284
question
python opencv
pythonでopencvをimportしようとするとimportエラーが発生してしまう。


Macでどのようにするのが良いのか分かりませんが、少なくとも、OpenCVは利用するPythonとリンクする必要があります。  
次のような記事もあるようです。私はMac上でビルドしていないので今回のケースの合うのかどうか分かりませんが、参考になりそうかなと思います。

  * <http://qiita.com/shim0mura/items/b0ec437206ed3d19d878>

>
> どこかのタイミングでpython2.7のモジュールを読み込むようになってしまっていた。そのため、brewでOpenCVをビルドした時にsoファイルが/usr/local/opt/opencv3/lib/python2.7/site-
> packages/に置かれたり、ファイルの中でもpython2.7前提でのビルドがされているために、シンボリックリンクを張っても以下のようなエラーが出てpythonで読み込めなかったりした。

  * <http://qiita.com/xaskg/items/690ce9048e708de41166>

> import sysして調べたパスと、brew doctorして出てきたpython絡みのwarningとを合わせると、次のことがわかります。
>
>     * Pythonが呼び出しているsite.pyから設定されているパス → 正常
>     * homebrewから設定した($HOME/.pyenv下の)パス → 異常
>
> おそらく、homebrewから設定しているパスが2.xのsite-packagesを呼び出しているはずです。  
>  このhomebrewで見るパスは、$HOME/.local/lib/python3.5/site-
> packagesの中のhomebrew.pthというファイルに書かれています。(そしてsite.pyはこのhomebrew.pthを読み込んでいるんでしょう。たぶん。)
>
> 中を開けてみると…
>
> homebrew.pth  
>  import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")
>
> ビンゴ！！！  
>  やっぱりこれでした！！！！  
>  この中身をコメントアウトするなり、削除するなりしてあげると…  
>  Python復活！！！！

余談ですが、私の場合(OSはCentOS6.6)、Pythonをshared libraryモード (`./configure --enable-
shared`)でビルドして、OpenCVはこのPythonを使うようにしました。そのために、ld.so.confにPythonのsoファイルのパスを設定してldconfigしています。  
Macで頑張らずにVirtual Machineなどを使って仮想OS上で扱うのもひとつの方法かと思います。


CC BY-SA 3.0
2017-03-07T04:32:31.150
33159
2017-03-13T08:05:56.150
2020-06-17T08:14:45.997
-1
806
33156
answer