Gadget zum Beheben von OpenCV-Abhängigkeitsfehlern: OpenCV Fixer

Als ich Nvidias offizielles Docker-Image zum Einsatz von Stable Video Diffusion verwendete, stellte ich fest, dass es in der OpenCV-Community ein seltsames Problem gab, das manuell gelöst werden musste, also habe ich ein kleines Tool geschrieben, das es automatisch beheben kann.

Lassen Sie uns darüber sprechen, wie Sie schnell ein Python-Softwarepaket veröffentlichen können.

schreibe vorne

Wenn bei der Verwendung von Software im Python-Ökosystem ein Fehler auftritt module 'cv2.dnn' has no attribute 'DictValue', können Sie dieses kleine Tool ausprobieren.

Wenn Sie weiter bestätigen möchten, dass das Problem durch OpenCV verursacht wird, können Sie natürlich versuchen, den folgenden Befehl auszuführen:

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

Wenn Sie nicht eine bestimmte Versionsnummer, sondern das unten stehende Fehlerprotokoll erhalten, bedeutet dies, dass Ihr Python-Softwarepaket Probleme aufweist, die behoben werden müssen.

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'

Dieses Problem wurde bereits früher in der Community gemeldet ( opencv/opencv-python #884 ). Der Hauptgrund ist das Kompatibilitätsproblem, das durch numpydie alte Version verursacht wird, die während der Installation eingeführt wurde . opencvWas noch schwieriger ist, ist, dass wir pip installdas Softwarepaket nicht einfach durch Ausführen aktualisieren können. Wir müssen dem Beitrag folgen und eine manuelle Reinigung und Installation durchführen, um das Problem zu lösen.

Daher habe ich ein einfaches Open-Source-Gadget geschrieben, um dieses Problem automatisch zu beheben. Die Open-Source-Adresse des Projekts lautet: soulteary/opencv-fixer .

Lassen Sie uns darüber sprechen, wie Sie dieses Gadget verwenden.

OpenCV-Fixer

Die Verwendung des Tools ist sehr einfach. Verwenden Sie wie bei der Verwendung eines normalen Softwarepakets pip installden Download des Toolpakets:

pip install opencv-fixer==0.2.5

Die Softwarereparatur erfordert eine OpenCV-Bereinigung und den Download von Updates. Wenn der Zugriff auf die offizielle PyPi-Quelle von Python für Sie langsam ist, können Sie die Softwarequelle problemlos auf einen inländischen Spiegel aktualisieren:

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

Führen Sie dann den folgenden Befehl aus, um die automatische Reparaturarbeit von OpenCV abzuschließen:

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

Wenn alles in Ordnung ist, wird eine Protokollausgabe ähnlich der folgenden angezeigt:

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

...

Wenn wir den vorherigen Testbefehl erneut ausführen und die Versionsnummer von OpenCV ermitteln können, ist alles wieder normal:

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

Wenn wir die Ausführung in einer Docker-Umgebung durchführen oder rooteinen Benutzer verwenden, erhalten wir möglicherweise das folgende warningWarnprotokoll:

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

Aber eigentlich gibt es kein Problem. Wenn wir es ausführen pip show opencv-python-headless, können wir sehen, dass die Software korrekt installiert wurde:

# 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: 

Sonstiges: Veröffentlichen Sie schnell ein Python-Paket

pip installEs ist eigentlich sehr einfach, schnell ein installierbares Python-Paket zu veröffentlichen .

Zuerst müssen Sie ein PyPi-Konto registrieren . Nach Abschluss der Registrierung werden wir gebeten, die Gültigkeit der E-Mail zu überprüfen. Nach Abschluss der E-Mail-Verifizierung müssen wir im Konto die „zweistufige Authentifizierung“ konfigurieren, um die Berechtigung zum Erhalt des API-Tokens zu aktivieren.

Unten auf der erhaltenen API-Token-Seite befindet sich eine Konfigurationsdatei, die mit einem Klick kopiert werden kann. Der Inhalt ähnelt dem folgenden. Wir können ihn speichern und später verwenden:

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

Wenn Sie ein macOS-Benutzer sind, kann es mühsam sein, ein Softwarepaket direkt zu veröffentlichen, ohne die lokale Python-Umgebung zu konfigurieren oder zu aktualisieren. Wenn Sie jedoch Docker verwenden, wird es viel einfacher:

cd package-dir

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

Mit dem obigen Befehl können Sie beispielsweise den Inhalt des Softwarepakets schnell dem /appVerzeichnis des Python 3.10-Containers zuordnen, wodurch es für uns einfacher wird, eine vollständige und saubere Umgebung für die Softwarefreigabe zu verwenden.

Während des Veröffentlichungsprozesses können wir die Softwarequelle konfigurieren und den Download abhängiger Softwarepakete abschließen:

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

pip install packaging twine

Führen Sie nach Abschluss der grundlegenden Abhängigkeiten den folgenden Befehl aus, um das zuvor erhaltene API-Token als Konfigurationsdatei zu speichern, die die PyPi-Quellenauthentifizierung bestehen kann.

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

Nachdem alles fertig ist, führen wir den folgenden Befehl aus, um die Erstellung und Veröffentlichung des Python-Softwarepakets abzuschließen:

python setup.py sdist bdist_wheel
twine upload dist/*

zu guter Letzt

Okay, beenden wir diesen Artikel hier.

–EOF


Dieser Artikel verwendet die Lizenzvereinbarung „Attribution 4.0 International (CC BY 4.0)“. Sie können ihn gerne nachdrucken, erneut ändern und verwenden, jedoch muss die Quelle angegeben werden. Namensnennung 4.0 International (CC BY 4.0)

Autor dieses Artikels: Su Yang

Erstellungszeit: 7. Januar 2024
Statistische Wortzahl: 3707 Wörter
Lesezeit: 8 Minuten zum Lesen
Link zu diesem Artikel: https://soulteary.com/2024/01/07/fix-opencv-dependency-errors-opencv-fixer .html

Supongo que te gusta

Origin blog.csdn.net/soulteary/article/details/135445549
Recomendado
Clasificación