在非标准位置编译并使用带有open-zwave的python-openzwave

LA_*_*LA_ 12 c++ python z-wave

我手动编译python-openzwave以使用C++库.

我想用它作为Kodi插件(在Pi 3上运行的OpenELEC),所以不能使用标准安装.我编译了所有内容,下载了缺失sixlouie库,现在尝试运行hello_world.py.

我目前的目标结构如下:

- root
  - bin
      - .lib
      - config
        Alarm.o
        ...
        libopenzwave.a
        libopenzwave.so
        libopenzwave.so.1.4
        ...
  - libopenzwave
      driver.pxd
      group.pxd
      ...
  - louie
      __init__.py
      dispatcher.py
      ...
  - openzwave
      __init__.py
      command.py
      ...
  six.py
  hello_world.py
Run Code Online (Sandbox Code Playgroud)

但是当我运行hello_world.py时,我收到以下错误 -

Traceback (most recent call last):
  File "hello_world.py", line 40, in <module> 
    from openzwave.controller import ZWaveController 
  File "/storage/.kodi/addons/service.multimedia.open-zwave/openzwave/controller.py", line 34, in <module> 
    from libopenzwave import PyStatDriver, PyControllerState 
ImportError: No module named libopenzwave
Run Code Online (Sandbox Code Playgroud)

如果我移动libopenzwave.a,并libopenzwave.so以根文件夹,然后我得到以下错误:

Traceback (most recent call last):
  File "hello_world.py", line 40, in <module> 
    from openzwave.controller import ZWaveController 
  File "/storage/.kodi/addons/service.multimedia.open-zwave/openzwave/controller.py", line 34, in <module> 
    from libopenzwave import PyStatDriver, PyControllerState 
ImportError: dynamic module does not define init function (initlibopenzwave)
Run Code Online (Sandbox Code Playgroud)

我的设置有什么问题?

Jim*_*ard 2

一般来说,所需的步骤包括调用为 openzwavemake build构建文件的句柄并下载所有依赖项(包括);并运行, (此安装脚本还为 openzwave 创建 Python 扩展)和..cppCythonmake installsetup-apisetup-lib.pyC++setup-web.pysetup-manager.py

由于您无法make install按照指定的方式运行,而是使用它们提供的存档,因此在使用 构建 openzwave 库后,创建 python 扩展的唯一其他选项make build.so为其生成文件,而不安装到标准位置。

通过运行以下命令在与脚本相同的文件夹中构建.socython 扩展:Cython

python setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)

src-lib这应该在命名中创建一个共享库libopenzwave.so(它与目录libopenzwave.so中包含的不同bin/),其中包含扩展模块中指定的所有功能。您可以尝试将其添加到libopenzwave文件夹中。

如果您在make build构建 openzwave 库期间传递了特殊的编译器标志,则应在执行setup-lib.py脚本时指定相同的编译器标志。CFLAGS这可以通过在执行之前指定(如此处指定的来完成,否则您可能会遇到诸如 之类的问题error adding symbols: File in wrong format