我手动编译了python-openzwave以使用C++ library。在
我想用它作为Kodi插件(OpenELEC运行在pi3上),所以不能使用标准安装。
我已经编译了所有内容,下载了缺少的six
和{hello_world.py
。在
我目前的dirs结构如下:
- 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
但当我跑哈罗的时候_世界.py,我得到以下错误-
^{pr2}$如果我将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)
我的设置有什么问题?在
一般来说,所需的步骤包括调用},它运行}。在
make build
,它处理为openzwave构建.cpp
文件并下载所有依赖项(包括Cython
);和{setup-api
,setup-lib.py
(此设置脚本还为openzwave创建了C++
Python扩展,setup-web.py
和{由于您不能按照您指定的方式运行
make install
,而是使用它们提供的归档文件,因此在使用make build
构建openzwave库之后,创建python扩展的唯一其他选项是为其生成.so
文件,而不安装到标准位置。在在与
Cython
脚本相同的文件夹中为cython扩展生成.so
,方法是运行:这应该在
src-lib
中创建一个名为libopenzwave.so
(它与bin/
目录中包含的libopenzwave.so
不同)中创建一个共享库,该库包含扩展模块中指定的所有功能。您可以尝试将其添加到libopenzwave
文件夹中。在如果在生成openzwave库的
make build
期间传递特殊的编译器标志,则在执行setup-lib.py
脚本时应指定相同的标志。这可以通过在执行前指定CFLAGS
来完成(如指定的here),否则您可能会遇到类似error adding symbols: File in wrong format
的问题。在以下是从问题的角度对
python-openzwave
的构建的描述。几乎所有的步骤都对应于根Makefile
的目标。在openzwave/Makefile
,不带参数调用(但使用继承的环境)。在openzwave/
子树(包括libhidapi
和{openzwave/.lib/libopenzwave.{a,so}
PREFIX
作为envvar(/usr/local
默认情况下)$(PREFIX)/etc/openzwave/
被分配给一个宏,该宏为配置文件(Options.cpp
)添加搜索位置:config/
->;/etc/openzwave/
->;<custom location>
。在install-lib
目标-是的,股票Makefile
不能只构建它;目标甚至不依赖于库)。setup-lib.py
src-lib/
,openzwave/.lib/libopenzwave.a
build/<...>/libopenzwave.so
-是的,与openzwave
的输出同名,因此请避免混淆它们openzwave
与模块静态链接,因此您不需要在部署中包含前者config
文件夹。它在生成包时包含在生成脚本中。在.cpp
。在pkg_resources
来定位其数据。因此,不能将.so
和config
放到current目录中,然后就结束了。您需要使pkg_resources.get_distribution('libopenzwave')
成功。pkg_resources
claims to support“普通文件系统包、.egg文件和解包的.egg文件。”.egg
(setup-lib.py bdist_egg
),将其解压到当前目录中,并将EGG-INFO
重命名为libopenzwave.egg-info
(就像在site-packages
中一样)。如果我在导入模块之前没有明确地将.so
的位置添加到PYTHON_PATH
/sys.path
中,则发出UserWarning
。在openzwave
、pyozwman
和{install
)setup-api.py
,setup-manager.py
,setup-web.py
src-*/
pkg_resources.declare_namespace()
,所以你可以在sys.path
上使用正确的文件/目录,而不使用任何.egg-info
相关问题 更多 >
编程相关推荐