openvinotoolkit / openvino

OpenVINO™ is an open-source toolkit for optimizing and deploying AI inference
https://docs.openvino.ai
Apache License 2.0
7.15k stars 2.24k forks source link

[Bug] No module named 'openvino._pyopenvino' #14280

Closed Co1lin closed 1 year ago

Co1lin commented 1 year ago

After following this to compile openvino for my respberry pi running on respbian 10, I cannot import Core successfully.

>>> from openvino.runtime import Core
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/pi/openvino/bin/armv7l/Release/python_api/python3.7/openvino/runtime/__init__.py", line 12, in <module>
    from openvino._pyopenvino import get_version
ModuleNotFoundError: No module named 'openvino._pyopenvino'

ls ~/openvino/bin/armv7l/Release/python_api/python3.7/openvino
__init__.py                                  frontend                 preprocess  utils.py
__pycache__                                  helpers                  pyopenvino
_offline_transformations                     inference_engine         runtime
_pyopenvino.cpython-37m-x86_64-linux-gnu.so  offline_transformations  test_utils

I have set env variables:

$ export PYTHONPATH=$PYTHONPATH:/home/pi/openvino/bin/armv7l/Release/python_api/python3.7
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/pi/openvino/bin/armv7l/Release

$ ls ~/openvino/bin/armv7l/Release/python_api/python3.7
_pyngraph.cpython-37m-x86_64-linux-gnu.so  ngraph  openvino  requirements.txt

$ ls ~/openvino/bin/armv7l/Release
benchmark_app                      libonnx_common.a                         libopenvino_paddle_frontend.so.2230
benchmark_app_legacy               libonnx_proto.a                          libopenvino_template_extension.so
classification_sample_async        libopencv_c_wrapper.so                   libopenvino_template_plugin.so
compile_tool                       libopenvino.so                           libopenvino_tensorflow_frontend.so
hello_classification               libopenvino.so.2022.3.0                  libopenvino_tensorflow_frontend.so.2022.3.0
hello_classification_c             libopenvino.so.2230                      libopenvino_tensorflow_frontend.so.2230
hello_nv12_input_classification    libopenvino_arm_cpu_opset.a              libov_protobuf_shutdown.a
hello_nv12_input_classification_c  libopenvino_arm_cpu_plugin.so            libov_shape_inference.a
hello_query_device                 libopenvino_arm_cpu_transformations.a    libprotobuf-lite.a
hello_reshape_ssd                  libopenvino_auto_batch_plugin.so         libprotobuf.a
libXLink.a                         libopenvino_auto_plugin.so               libpugixml.a
libcnpy.a                          libopenvino_c.so                         libtemplate_extension.so
libfluid.a                         libopenvino_c.so.2022.3.0                libutil.a
libformat_reader.so                libopenvino_c.so.2230                    libvpu_common_lib.a
libgflags_nothreads.a              libopenvino_gapi_preproc.so              libvpu_graph_transformer.a
libie_docs_snippets.a              libopenvino_hetero_plugin.so             model_creation_sample
libie_samples_utils.a              libopenvino_intel_myriad_plugin.so       ov_integration_snippet
libinference_engine_legacy.a       libopenvino_ir_frontend.so               ov_integration_snippet_c
libinterpreter_backend.a           libopenvino_ir_frontend.so.2022.3.0      pcie-ma2x8x.mvcmd
libitt.a                           libopenvino_ir_frontend.so.2230          plugins.xml
libmvnc.a                          libopenvino_onnx_frontend.so             python_api
libngraph_builders.a               libopenvino_onnx_frontend.so.2022.3.0    speech_sample
libngraph_reference.a              libopenvino_onnx_frontend.so.2230        usb-ma2x8x.mvcmd
liboffline_transformations.a       libopenvino_paddle_frontend.so
libonnx.a                          libopenvino_paddle_frontend.so.2022.3.0
HeywardLiu commented 1 year ago

@Co1lin Hi, maybe you can try to export path without '$' in front of PYTHONPATH and LD_LIBRARY_PATH This is how I export openvino path.

$ export PYTHONPATH=PYTHONPATH:/home/pi/openvino/bin/armv7l/Release/python_api/python3.7
$ export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/home/pi/openvino/bin/armv7l/Release
Co1lin commented 1 year ago

@HeywardLiu Hi! I tried this way, but it didn't help.

❯ export PYTHONPATH=PYTHONPATH:/home/pi/openvino/bin/armv7l/Release/python_api/python3.7
❯ export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/home/pi/openvino/bin/armv7l/Release
❯ python3
Python 3.7.3 (default, Oct 31 2022, 14:04:00)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from openvino.runtime import Core
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/pi/openvino/bin/armv7l/Release/python_api/python3.7/openvino/runtime/__init__.py", line 12, in <module>
    from openvino._pyopenvino import get_version
ModuleNotFoundError: No module named 'openvino._pyopenvino'
>>> quit()
❯ ls /home/pi/openvino/bin/armv7l/Release/python_api/python3.7
_pyngraph.cpython-37m-x86_64-linux-gnu.so  ngraph  openvino  requirements.txt
❯ ls /home/pi/openvino/bin/armv7l/Release
benchmark_app                          libopenvino_c.so.2022.3.0
benchmark_app_legacy                   libopenvino_c.so.2230
classification_sample_async            libopenvino_gapi_preproc.so
compile_tool                           libopenvino_hetero_plugin.so
hello_classification                   libopenvino_intel_myriad_plugin.so
...
ilya-lavrenov commented 1 year ago

_pyngraph.cpython-37m-x86_64-linux-gnu.so

Here we can see x86_64, which means you improperly cross-compiled python binaries. They are created with x86-64 prefix and they cannot be loaded by ARM python.

Please, try to use docker images from here to build ARM plugin and python extensions.

Alternatively, you can try to set custom python suffix via cmake -DPYTHON_MODULE_EXTENSION=.cpython-37-armv7l-linux-gnu.so. To properly understand the value of module extension, try this code:

from distutils import sysconfig as ds
print(ds.get_config_var('EXT_SUFFIX') or ds.get_config_var('SO'))
RDXiaoLu commented 1 year ago

I have the same problem, file can't see x86_64, which is arm, but have a same problem.