43236
環境  
Ubuntu16.04

以下のようにOpencvをビルドすると、`make install`でcv2.soが`/usr/local/lib/python2.7/dist-
packages/cv2.so`にコピーされるのですが、これを`make
install`でpython3.6の`/usr/local/lib/python3.6/dist-packages/cv2.so`  
にコピーされるように変更したいのですが、どの部分で設定を変更すればよいのでしょうか。

以下行ったこと

```

    git clone https://github.com/opencv/opencv.git
    cd opencv
    mkdir build
    cd build
    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D ..
    make 
    make install
    
```
CC BY-SA 3.0
2018-04-14T03:09:34.593
43228
2018-04-17T02:31:03.147
2018-04-14T13:21:50.093
19110
25909
question
python ubuntu makefile cmake
OpenCV の make install の対象フォルダを変更する方法
cmakeのコマンドを実行後、メッセージに以下のようなPythonのサポート情報が表示されるので、それを見ると問題がどこにあるかわかると思います。

```

    --   Python 3:
    --     Interpreter:                 /usr/bin/python3 (ver 3.5.2)
    --     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython3.5m.so (ver 3.5.2)
    --     numpy:                       /usr/lib/python3/dist-packages/numpy/core/include (ver 1.11.0)
    --     packages path:               lib/python3.5/dist-packages
    -- 
    --   Python (for build):            /usr/bin/python2.7
    -- 
    
```

cmakeで、PYTHON2(3)_EXECUTABLE等のオプションを付けなかった場合は、ubuntu16.04付属のPython2.7とPython3.5を自動的に検出します。Python2.7の方が正常にビルドされてインストールされたのはそういう理由です。Python3.5の方はnumpyがインストールされていれば正常にビルドされますがnumpyがなければ何もしません。

Python3.6の方にインストールしたい場合には、cmakeにオプションを追加する必要があるので、opencvの公式マニュアルを探したところ以下の記載がありました。

```

    [optional] Building python. Set the following python parameters:
    
    PYTHON2(3)_EXECUTABLE = <path to python>
    PYTHON_INCLUDE_DIR = /usr/include/python<version>
    PYTHON_INCLUDE_DIR2 = /usr/include/x86_64-linux-gnu/python<version>
    PYTHON_LIBRARY = /usr/lib/x86_64-linux-gnu/libpython<version>.so
    PYTHON2(3)_NUMPY_INCLUDE_DIRS = /usr/lib/python<version>/dist-packages/numpy/core/include/
    
```

最終的には、以下のオプションを追加するとpython3.6でmakeすることができました。オプションの値はPython3.6をソースからコンパイルして既定の設定でインストールした場合のものです。環境に応じて変更してください。

```

    PYTHON3_EXECUTABLE=/usr/local/bin/python3.6
    PYTHON3_INCLUDE_DIR=/usr/local/include/python3.6m
    PYTHON3_PACKAGES_PATH=/usr/local/lib/python3.6/site-packages
    
```

なお、簡単にopencvをインストールしたい場合はopencv-
pythonというアンオフィシャルのパッケージがあるのでそれを使ってインストールすることもできます。

```

    pip install opencv-python 
    
```
CC BY-SA 3.0
2018-04-14T10:42:29.800
43236
2018-04-17T02:20:10.707
2018-04-17T02:20:10.707
15171
15171
43228
answer
インストール先の指定自体は`cmake`実行時に以下の変数で指定しています。

```

    CMAKE_INSTALL_PREFIX=/usr/local
        ↓
    /usr/local/lib/python2.7/dist-packages/cv2.so
    ~~~~~~~~~~
    
```

ただしこのパスの中で`.../lib/python<VER>/dist-
packages/cv2.so`の部分はシステムデフォルト、標準PATHで見つかったPythonインタプリタのバージョンに対応したライブラリを生成して（区別が付くよう）バージョンに対応したディレクトリにインストールされているものと思います。

`Python3.x`向けにライブラリを作成・インストールしたいのであれば、[Yasuhiro
Nijiさんの回答](https://ja.stackoverflow.com/a/43236/3060)にもある通り、`cmake`実行時に`PYTHON3_*`で始まる変数でpython3の在り処を明示的に指定する必要があるのだと思います。

```

    $ cmake -D CMAKE_BUILD_TYPE=RELEASE \
            -D CMAKE_INSTALL_PREFIX=/usr/local \
            -D PYTHON3_EXECUTABLE=/usr/local/bin/python3.6 \
            -D ..
    
```

* * *

指定すべき変数については[関連質問](https://ja.stackoverflow.com/q/43276/3060)の方で
[sa-y](https://ja.stackoverflow.com/users/27410/sa-y)さんがコメントを付けているように、[公式のドキュメント](https://docs.opencv.org/trunk/d7/d9f/tutorial_linux_install.html)にも記載があるので確認してみてください。

> Building OpenCV from Source Using CMake
>
>   4. [optional] Building python. Set the following python parameters:
>
> PYTHON2(3)_EXECUTABLE = <path to python>  
>  PYTHON_INCLUDE_DIR = /usr/include/python  
>  PYTHON_INCLUDE_DIR2 = /usr/include/x86_64-linux-gnu/python  
>  PYTHON_LIBRARY = /usr/lib/x86_64-linux-gnu/libpython.so  
>  PYTHON2(3)_NUMPY_INCLUDE_DIRS = /usr/lib/python/dist-
> packages/numpy/core/include/
>
>
CC BY-SA 3.0
2018-04-17T02:20:17.683
43302
2018-04-17T02:31:03.147
2020-06-17T08:14:45.997
-1
3060
43228
answer