【发布时间】:2016-10-10 10:48:42
【问题描述】:
我手动编译 python-openzwave 以使用 C++ library。
我想将它用作 Kodi 插件(在 Pi 3 上运行的 OpenELEC),所以不能使用标准安装。
我已经编译了所有内容,下载了缺少的 six 和 louie 库,现在尝试运行 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
但是当我运行 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
如果我将 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)
我的设置有什么问题?
【问题讨论】:
-
您确定您的模块有初始化信息,如此处所述:docs.python.org/3/extending/… ?
-
手动编译到底如何?如果我没记错的话,找不到
initlibopenzwave是因为Cython文件不是cythonized并正确编译(Cython负责为您创建init<modulename>函数。您能否详细说明编译过程? -
@Jim,我已经下载了源代码github.com/OpenZWave/python-openzwave/raw/master/archives/…,解压并运行
make build。此版本不需要Cython,根据此讨论 - groups.google.com/forum/#!topic/python-openzwave-discuss/…。 -
@ShamilKMuhammed,这不是我的模块,但我可以看到
libopenzwave.cpp具有initlibopenzwave功能。 -
我看到
.pyx文件正在构建的唯一情况是在setup-lib.py期间,它在sudo make install(或sudo make install-lib)执行时运行。我现在在import上得到了一个可爱的段错误。