OpenCV の依存関係エラーを修正するガジェット: OpenCV Fixer

Nvidia の公式 Docker イメージを使用して Stable Video Diffusion をトスするときに、手動で解決する必要がある奇妙な問題が OpenCV コミュニティにあることがわかりました。そこで、それを自動的に修正できる小さなツールを作成しました。

そして、Python ソフトウェア パッケージをすばやく公開する方法について説明しましょう。

前に書く

Python エコシステムのソフトウェアを使用しているときにエラーが発生した場合はmodule 'cv2.dnn' has no attribute 'DictValue'、この小さなツールを試すことができます。

もちろん、問題の原因が OpenCV であることをさらに確認したい場合は、次のコマンドを実行してみてください。

python -c "import cv2; print(cv2.__version__)"

特定のバージョン番号ではなく、以下のエラー ログが表示された場合は、Python ソフトウェア パッケージに修正が必要な問題があることを意味します。

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python3.10/dist-packages/cv2/__init__.py", line 181, in <module>
    bootstrap()
  File "/usr/local/lib/python3.10/dist-packages/cv2/__init__.py", line 175, in bootstrap
    if __load_extra_py_code_for_module("cv2", submodule, DEBUG):
  File "/usr/local/lib/python3.10/dist-packages/cv2/__init__.py", line 28, in __load_extra_py_code_for_module
    py_module = importlib.import_module(module_name)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/usr/local/lib/python3.10/dist-packages/cv2/typing/__init__.py", line 168, in <module>
    LayerId = cv2.dnn.DictValue
AttributeError: module 'cv2.dnn' has no attribute 'DictValue'

この問題はコミュニティで以前に報告されました ( opencv/opencv-python #884 ) 主な理由は、インストール中にnumpy導入された古いバージョンopencvによって引き起こされる互換性の問題です。さらに注意が必要なのは、pip install単に実行するだけではソフトウェア パッケージを更新できないことです。問題を解決するには、投稿に従って手動でクリーニングとインストールを実行する必要があります。

したがって、この問題を自動的に修正するための単純なオープン ソース ガジェットを作成しました。プロジェクトのオープン ソース アドレスは、soulteary/opencv-fixerです。

このガジェットの使い方について話しましょう。

OpenCV フィクサー

このツールの使用方法は非常に簡単で、通常のソフトウェア パッケージを使用するのと同じように、次のコマンドを使用してpip installツール パッケージのダウンロードを完了します。

pip install opencv-fixer==0.2.5

ソフトウェアの修復には OpenCV のクリーニングと更新のダウンロードが必要です。Python の公式 PyPi ソースへのアクセスが遅い場合は、ソフトウェア ソースを国内ミラーに簡単に更新できます。

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

次に、次のコマンドを実行して、OpenCV の自動修復作業を完了します。

python -c "from opencv_fixer import AutoFix; AutoFix()"

すべてが正常であれば、次のようなログ出力が表示されます。

Uninstalling the following OpenCV-related packages: opencv, opencv-fixer

Successfully uninstalled opencv

Successfully uninstalled opencv-fixer

Found opencv-python version is lower than 4.9, version=4.7.0

Begin upgrade your opencv-python version to 4.9+.

The folder /usr/local/lib/python3.10/dist-packages/cv2 has been removed successfully

...

前のテスト コマンドを再度実行し、OpenCV のバージョン番号を取得できれば、すべてが正常に復元されます。

# python -c "import cv2; print(cv2.__version__)"
4.9.0

もちろん、Docker 環境で実行する場合、またはrootユーザーを使用して実行する場合は、次のwarning警告ログが表示される場合があります。

Install opencv-python-headless failed: WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

しかし、実際には問題はなく、実行してみるとpip show opencv-python-headless、ソフトウェアが正しくインストールされていることがわかります。

# pip show opencv-python-headless
Name: opencv-python-headless
Version: 4.9.0.80
Summary: Wrapper package for OpenCV python bindings.
Home-page: https://github.com/opencv/opencv-python
Author: 
Author-email: 
License: Apache 2.0
Location: /usr/local/lib/python3.10/dist-packages
Requires: numpy, numpy, numpy, numpy
Required-by: 

その他: Python パッケージを迅速に公開する

pip install実際、インストール可能な Python パッケージをすばやく公開するのは非常に簡単です。

まず、 PyPi アカウントを登録する必要があります。登録が完了すると、メールの有効性を確認するように求められます。メール認証が完了したら、アカウントに「2段階認証」を設定し、APIトークンを取得する権限を有効にする必要があります。

取得した API トークン ページの下部に、次のような内容の設定ファイルがあり、ワンクリックでコピーできます。保存して後で使用できます。

[pypi]
  username = __token__
  password = pypi-一长串Token

macOS ユーザーの場合、ローカルの Python 環境を構成または更新せずにソフトウェア パッケージを直接公開するのは面倒な場合があります。しかし、Docker を使用すると、はるかに簡単になります。

cd package-dir

docker run --rm -it -v `pwd`:/app python:3.10 bash

/appたとえば、上記のコマンドを使用すると、ソフトウェア パッケージの内容を Python 3.10 コンテナのディレクトリにすばやくマップでき、ソフトウェア リリースに完全でクリーンな環境を簡単に使用できるようになります。

公開プロセス中に、ソフトウェア ソースを構成し、依存するソフトウェア パッケージのダウンロードを完了できます。

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

pip install packaging twine

基本的な依存関係が完了したら、次のコマンドを実行して、以前に取得した API トークンを、PyPi ソース認証を通過できる構成ファイルとして保存します。

cat << EOF > ~/.pypirc
[pypi]
  username = __token__
  password = pypi-一长串Token
EOF

すべての準備ができたら、次のコマンドを実行して、Python ソフトウェア パッケージの構築と公開を完了します。

python setup.py sdist bdist_wheel
twine upload dist/*

やっと

さて、この記事はここで終わりにしましょう。

–EOF


この記事は「表示 4.0 インターナショナル (CC BY 4.0)」のライセンス契約を使用していますので、転載、再改変、使用は自由ですが、出典の明示が必要です。表示 4.0 インターナショナル (CC BY 4.0)

この記事の著者: スー・ヤン

作成日時: 2024 年 1 月 7 日
統計ワード数: 3707 ワード
読了時間: 8 分で読める
この記事へのリンク: https://soulteary.com/2024/01/07/fix-opencv-dependency-errors-opencv-fixer .html

おすすめ

転載: blog.csdn.net/soulteary/article/details/135445549