Нет, * .so-файл не может быть импортирован.
Если у вас есть C / CPP-фоны, тогда pyx / pxd / so-business легче всего понять, используя следующую модель:
- Полученное расширение (
*.so
-файл) соответствует конечному артефакту в мире C / CPP, который может быть исполняемым файлом, общим объектом (*.so
) или коллекцией библиотеки / объектного файла. Если вы просто запустите получившуюся программу, это все, что вам нужно. Например, вы можете использовать (и, вероятно, использовать) интерпретатор CPython, не создав его или не имея его исходного кода. По аналогии, если у вас есть двоичное расширение (*.so
), вы можете импортировать и использовать его без необходимости его сборки (или даже наличия соответствующих pyx-файлов или компилятора на вашей машине) - это то, что предоставляется колесо .
*.pyx
соответствует c / cpp-файлам, которые имеют определения функциональности. Эти файлы необходимы, если вы хотите построить полученный артефакт из источника. В мире C / CPP этот процесс сборки будет запускаться с использованием make
или аналогичного. pyx-файлы необходимы, если вы устанавливаете пакет через python setup.py install
- что соответствует вызову make
.
*.pxd
соответствует заголовкам (h / hpp-файлам): он описывает функциональность результирующих so-файлов, поэтому его можно использовать повторно. Например, одного лишь наличия CPython-интерпретатора недостаточно для создания расширений - нужно установить dev-версию, а также включить Python.h
& Co. присутствуют в машине.
Так что же можно сделать?
Первая возможность:
Если авторы пакета считают *.pxd
-файлы частью общедоступного API, они могут поместить соответствующие pxd-файлы рядом с * .so-файлами в установку , поэтому -интерфейс модуля может быть использован / расширен.
Если они не помещают pxd-файл в установку, высока вероятность того, что этот c-интерфейс является деталью реализации, и вам не следует его использовать, так как он может измениться без уведомления в будущем.
Тем не менее, можно рискнуть и скопировать необходимые pxd-файлы в установку для каждой руки, но сначала убедившись, что это правильная pxd-версия (то есть та же, что и для so-файлов в установке). были построены).
Вторая возможность:
Самый простой способ убедиться, что используется правильная pxd-версия, - это собрать пакет из исходного кода, т.е.
- загрузка нужной версии из github (мастер или последняя версия)
- звонит
python setup.py install
или то, что README говорит вам сделать
Теперь вместо копирования pdx-файлов в установку можно добавить include_path к загруженному пакетному источнику через include_path
для функции cythonize или добавив его в sys.path
.
В качестве альтернативы, как указал @BeforeFlight в комментариях, можно использовать python setup.py develop
(или pip install -e
ту же папку, чтобы ее можно было удалить), и поскольку вместо копирования данных создается ссылка, pxd- файлы будут найдены.
Приведенные выше решения помогут построить модуль, однако его распространение - это совсем другая история.