Я вручную скомпилировал питон-openzwave работать с Библиотека C ++.
Я хотел бы использовать его как аддон Kodi (OpenELEC работает на Pi 3), поэтому не могу использовать стандартную установку.
Я скомпилировал все, скачал пропавший six
а также louie
libs, а теперь попробуй запустить 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
Но когда я запускаю 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)
Что не так с моей настройкой?
Как правило, необходимые шаги состоят из звонков make build
который обрабатывает строительство .cpp
файлы для openzwave и загрузки всех зависимостей (включая Cython
); а также make install
который управляет setup-api
, setup-lib.py
(этот сценарий установки также создает C++
Расширение Python для openzwave), setup-web.py
а также setup-manager.py
,
Так как вы не можете бежать make install
как вы указали, и вместо этого используете предоставляемый ими архив, единственные другие варианты создания расширения Python после сборки библиотеки openzwave с make build
порождает .so
файлы для него без установки в стандартные места.
Строительство .so
для расширения Cython в той же папке, что и Cython
Сценарии выполняются с помощью:
python setup.py build_ext --inplace
Это должно создать общую библиотеку в src-lib
названный libopenzwave.so
(это отличается от libopenzwave.so
содержится в bin/
каталог), который содержит все функции, указанные в модуле расширения. Вы можете попробовать добавить это к libopenzwave
папка.
Если вы передадите специальные флаги компилятора во время make build
для создания библиотеки openzwave вы должны указать те же самые при выполнении setup-lib.py
скрипт. Это можно сделать, указав CFLAGS
перед его выполнением (как указано Вот) или у вас могут быть такие проблемы, как error adding symbols: File in wrong format
,
Вот описание python-openzwave
строить с точки зрения вопроса. Почти все шаги соответствуют корню Makefile
цели.
openzwave openzwave/.lib/
мишень).
openzwave/Makefile
Вызывается без параметров (но с унаследованным окружением).openzwave/
поддерево (включает libhidapi
а также libtinyxml
, статически связанный).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
в правильный каталог и назовите это день. Вам нужно сделать pkg_resources.get_distribution('libopenzwave')
добиться успеха.
pkg_resources
претензии на поддержку «нормальные пакеты файловой системы, файлы .egg и распакованные файлы .egg.».egg
(setup-lib.py bdist_egg
), распакуйте его в текущий каталог и переименуйте EGG-INFO
в libopenzwave.egg-info
(как в site-packages
). UserWarning
выдается, если я не добавлю .so
находится в PYTHON_PATH
/sys.path
перед импортом модуля.openzwave
,pyozwman
а также pyozwweb
Пакеты Python (install
)
setup-api.py
,setup-manager.py
,setup-web.py
src-*/
pkg_resources.declare_namespace()
так что ты будешь в порядке с правильными файлами / папками на sys.path
без всяких .egg-info
«s