Nuitka: Missing configuration file | OpenCV

last factory Nuitka, win11, python 3.9.9 and 3.10.1 OpenCV: 3.4.17.61

command: python -m nuitka --windows-uac-admin --mingw64 --enable-plugin=anti-bloat --lto=no --onefile --plugin-enable=numpy "D:\Test.py"

Code: import cv2

Test.exe

Traceback (most recent call last):
  File "C:\Users\test\AppData\Local\Temp\ON6B4C~1\Test.py", line 1, in <module>
  File "C:\Users\test\AppData\Local\Temp\ON6B4C~1\cv2\__init__.py", line 118, in <module cv2>
  File "C:\Users\test\AppData\Local\Temp\ON6B4C~1\cv2\__init__.py", line 66, in bootstrap
  File "C:\Users\test\AppData\Local\Temp\ON6B4C~1\cv2\__init__.py", line 64, in load_first_config
ImportError: OpenCV loader: missing configuration file: ['config.py']. Check OpenCV installation.

I tried add: --include-data-file=D:/TEST/Lib/site-packages/cv2/config.py=cv2 --include-data-file=D:/TEST/Lib/site-packages/cv2/config-3.py=cv2

test.exe

  File "C:\Users\test\AppData\Local\Temp\ONA816~1\Test.py", line 1, in <module>
    import cv2
  File "C:\Users\test\AppData\Local\Temp\ONA816~1\cv2\__init__.py", line 118, in <module cv2>
  File "C:\Users\test\AppData\Local\Temp\ONA816~1\cv2\__init__.py", line 106, in bootstrap
  File "C:\Users\test\AppData\Local\Temp\ONA816~1\cv2\__init__.py", line 118, in <module cv2>
  File "C:\Users\test\AppData\Local\Temp\ONA816~1\cv2\__init__.py", line 31, in bootstrap
ImportError: ERROR: recursion is detected during loading of "cv2" binary extensions. Check OpenCV installation.

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 18 (13 by maintainers)

Most upvoted comments

I replaced

    py_module = sys.modules.pop("cv2")
    native_module = importlib.import_module("cv2")
    sys.modules["cv2"] = py_module

with:

def __bootstrap__():
   global __bootstrap__, __loader__, __file__
   import sys, pkg_resources, imp
   __file__ = pkg_resources.resource_filename(__name__,'cv2.cpython-310-x86_64-linux-gnu.so')
   print(__file__)
   __loader__ = None; del __bootstrap__, __loader__
   return imp.load_dynamic(__name__,__file__)

def bootstrap():
   [...]
   py_module = sys.modules.pop("cv2")
   native_module = __bootstrap__()
   sys.modules["cv2"] = py_module

Then I just needed to move the shared lib to the dist folder and it worked

In Windows,

def __bootstrap__():
   import imp
   return imp.load_dynamic(__name__,"cv2.pyd")

Just checked, cv2 is also not working on Linux.