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