LoginSignup
1
4

More than 3 years have passed since last update.

opencvをソースコードからビルドしたときにopencv-pythonに依存するpipパッケージのインストールを通す

Posted at

概要

この記事でopencvをソースコードからビルドしました。自作のプログラムからimport cv2はできるのですがopencv-pythonに依存するパッケージをインストールしようとするとopencv-pythonないよって怒られます。site-packagesにシンボリックリンクを貼っただけなので、pip的にはopencvが入ったことにならないのでしょうか?そういえばcmakeでpipの場所を指定しなかったような。

そこで、cv2をラップしたパッケージを作ってみました。import cv2はできるので、空っぽのopencv-pythonパッケージを作ってごまかすのもありではと思いましたが、せっかくなのでちゃんと(?)ラップしました。

構成

構成は以下のとおりです。

wheel/
├── build               # ビルドしたものが出力される
├── cv2                 # パッケージ名になる
│   ├── __init__.py     # 外にcv2として見せる
│   └── _native
│       ├── cv2.cpython-36m-aarch64-linux-gnu.so # 実体
│       └── __init__.py # 元のcv2をインポートする
├── dist                # whlファイルが出力される。これをpip installする
├── MANIFEST.in         # 実体を指定する。
└── setup.py            # pipの各種設定

各ファイルの中身は以下です。__init__.py何もわからない。。

setup.py
from setuptools import setup
from setuptools.dist import Distribution

class BinaryDistribution(Distribution):
    def has_ext_modules(foo):
        return True

long_description = "long description of the wheel"

setup(
    name='opencv-python',
    packages=['cv2'],
    version='3.4.3',

    include_package_data=True,
    distclass=BinaryDistribution,

    author='devmikyom',
    description='OpenCV wrapper for Ubuntu 20.04 on raspberry pi 4',
    long_description = long_description,
    classifiers=[
        'Programming Language :: Python :: 3.6'
    ]
)
MANIFEST
include cv2/_native/cv2.cpython-36m-aarch64-linux-gnu.so
wheel/cv2/__init__.py
from ._native.cv2 import *
__version__ = '3.4.3'
wheel/cv2/_native/__init__.py
from .cv2 import *

__init__.py本当に何もわからない。。

ビルドとインストール

$ python setup.py bdist_wheel
$ pip install dist/opencv_python-3.4.3-cp36-cp36m-linux_aarch64.whl

import cv2できてpip的にもopencv-pythonとしても見えているようです。これで本当に合っているのかよくわかりませんが…

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4