Способ реализации Qt и OpenCV для работы на Python - через механизм привязки, в котором элементы в общей собственной библиотеке (в обоих случаях запрограммированной на C ++) можно вызывать из интерпретатора Python. Это может быть достигнуто несколькими способами, такими как модуль ctypes стандартной библиотеки Python.
Проблема заключается в том, что две общие библиотеки предоставляют одинаковые символы. OpenCV может использовать Qt в качестве движка для создания GUI (он может использовать и другие, но версия, которую вы используете, скомпилирована для включения символов Qt). Когда интерпретатор загружает две общие библиотеки (в данном случае /Users/emadboctor/Library/Python/3.7/lib/python/site-packages/cv2/.dylibs/QtGui
и /usr/local/lib/python3.7/site-packages/PyQt5/Qt/lib/QtPrintSupport.framework
), он выдает предупреждение, поскольку механизм загрузки обнаружил один и тот же символ в разных местах. Предупреждение One of the two will be used. Which one is undefined.
означает, что оно может принимать одно или другое, но нет предопределенного порядка или каких-либо предпочтений. Это проблема, если вы ожидаете определенного поведения, которое реализовано только в одном из двух (скажем, версия библиотеки cv2 для Qt - это версия 5.1, а версия PyQt - 5.2, и определенная функция doSomething
была изменена с от версии к другой. Последовательность загрузки будет определять поведение вашей программы непредсказуемым образом.)
В общем, поскольку вы находитесь на ранних этапах разработки, а Qt - довольно стабильная библиотека, вам следует будь умницей. В случае, если вы столкнулись с вышеупомянутой проблемой, вы можете попробовать разные вещи, например, перекомпилировать OpenCV, чтобы использовать ожидаемую версию Qt (или сделать то же самое для PyQt). Я также рекомендую вам начать использовать виртуальные среды, поскольку тогда вы также сможете решить эту проблему, установив разные версии зависимостей для разных проектов.