Импортировать код Cython в Python

У меня есть код Cython "rotate_polygon_nms.pyx", и я попытался импортировать его в код Python, но он выдает ошибку:

Код Cython:

import numpy as np
cimport numpy as np

assert sizeof(int) == sizeof(np.int32_t)

cdef extern from "rotate_gpu_nms.hpp":
    void _rotate_nms(np.int32_t*, int*, np.float32_t*, int, int, float, int)

def rotate_gpu_nms(np.ndarray[np.float32_t, ndim=2] dets, np.float_t thresh, np.int32_t device_id=0):
    cdef int boxes_num = dets.shape[0]
    cdef int boxes_dim = dets.shape[1]
    cdef int num_out
    cdef np.ndarray[np.int32_t, ndim=1] \
        keep = np.zeros(boxes_num, dtype=np.int32)
    cdef np.ndarray[np.float32_t, ndim=1] \
        scores = dets[:, 5]
    cdef np.ndarray[np.int_t, ndim=1] \
        order = scores.argsort()[::-1]
    cdef np.ndarray[np.float32_t, ndim=2] \
        sorted_dets = dets[order, :]
    thresh = <np.float>thresh
    _rotate_nms(&keep[0], &num_out, &sorted_dets[0, 0], boxes_num, boxes_dim, thresh, device_id)
    keep = keep[:num_out]
    return order[keep]

Код rotate_gpu_nms.hpp:

void _rotate_nms(int* keep_out, int* num_out, const float* boxes_host, int boxes_num,
          int boxes_dim, float nms_overlap_thresh, int device_id);

Ошибка

Traceback (most recent call last): File "inference1.py", line 17, in from libs.fast_rcnn import build_fast_rcnn1 File "../libs/fast_rcnn/build_fast_rcnn1.py", line 14, in from libs.box_utils import nms_rotate File "../libs/box_utils/nms_rotate.py", line 13, in from libs.box_utils.rotate_polygon_nms import rotate_gpu_nms ImportError: No module named 'libs.box_utils.rotate_polygon_nms'

Я попытался использовать две приведенные ниже команды, но тоже выдает ошибку.

import pyximport 
pyximport.install()

Ошибка::

In file included from /usr/include/numpy/ndarraytypes.h:1788:0, from /usr/include/numpy/ndarrayobject.h:18, from /usr/include/numpy/arrayobject.h:4, from /home/ashwaq/.pyxbld/temp.linux-x86_64-3.5/pyrex/libs/box_utils/rotate_polygon_nms.c:525: /usr/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning "Using deprecated NumPy API, disable it by " "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp] #warning "Using deprecated NumPy API, disable it by " \ ^~~~~~~ /home/ashwaq/.pyxbld/temp.linux-x86_64-3.5/pyrex/libs/box_utils/rotate_polygon_nms.c:527:10: fatal error: rotate_gpu_nms.hpp: No such file or directory #include "rotate_gpu_nms.hpp" ^~~~~~~~~~~~~~~~~~~~ compilation terminated. Traceback (most recent call last): File "/home/ashwaq/anaconda3/lib/python3.5/distutils/unixccompiler.py", line 118, in _compile extra_postargs) File "/home/ashwaq/anaconda3/lib/python3.5/distutils/ccompiler.py", line 909, in spawn spawn(cmd, dry_run=self.dry_run) File "/home/ashwaq/anaconda3/lib/python3.5/distutils/spawn.py", line 36, in spawn _spawn_posix(cmd, search_path, dry_run=dry_run) File "/home/ashwaq/anaconda3/lib/python3.5/distutils/spawn.py", line 159, in _spawn_posix % (cmd, exit_status)) distutils.errors.DistutilsExecError: command 'gcc' failed with exit status 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/home/ashwaq/anaconda3/lib/python3.5/site-packages/pyximport/pyximport.py", line 215, in load_module inplace=build_inplace, language_level=language_level) File "/home/ashwaq/anaconda3/lib/python3.5/site-packages/pyximport/pyximport.py", line 191, in build_module reload_support=pyxargs.reload_support) File "/home/ashwaq/anaconda3/lib/python3.5/site-packages/pyximport/pyxbuild.py", line 102, in pyx_to_dll dist.run_commands() File "/home/ashwaq/anaconda3/lib/python3.5/distutils/dist.py", line 955, in run_commands self.run_command(cmd) File "/home/ashwaq/anaconda3/lib/python3.5/distutils/dist.py", line 974, in run_command cmd_obj.run() File "/home/ashwaq/anaconda3/lib/python3.5/site-packages/Cython/Distutils/old_build_ext.py", line 185, in run _build_ext.build_ext.run(self) File "/home/ashwaq/anaconda3/lib/python3.5/distutils/command/build_ext.py", line 339, in run self.build_extensions() File "/home/ashwaq/anaconda3/lib/python3.5/site-packages/Cython/Distutils/old_build_ext.py", line 193, in build_extensions self.build_extension(ext) File "/home/ashwaq/anaconda3/lib/python3.5/distutils/command/build_ext.py", line 533, in build_extension depends=ext.depends) File "/home/ashwaq/anaconda3/lib/python3.5/distutils/ccompiler.py", line 574, in compile self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts) File "/home/ashwaq/anaconda3/lib/python3.5/distutils/unixccompiler.py", line 120, in _compile raise CompileError(msg) distutils.errors.CompileError: command 'gcc' failed with exit status 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "inference1.py", line 17, in from libs.fast_rcnn import build_fast_rcnn1 File "../libs/fast_rcnn/build_fast_rcnn1.py", line 14, in from libs.box_utils import nms_rotate File "../libs/box_utils/nms_rotate.py", line 13, in from libs.box_utils.rotate_polygon_nms import rotate_gpu_nms File "/home/ashwaq/anaconda3/lib/python3.5/site-packages/pyximport/pyximport.py", line 458, in load_module language_level=self.language_level) File "/home/ashwaq/anaconda3/lib/python3.5/site-packages/pyximport/pyximport.py", line 231, in load_module raise exc.with_traceback(tb) File "/home/ashwaq/anaconda3/lib/python3.5/site-packages/pyximport/pyximport.py", line 215, in load_module inplace=build_inplace, language_level=language_level) File "/home/ashwaq/anaconda3/lib/python3.5/site-packages/pyximport/pyximport.py", line 191, in build_module reload_support=pyxargs.reload_support) File "/home/ashwaq/anaconda3/lib/python3.5/site-packages/pyximport/pyxbuild.py", line 102, in pyx_to_dll dist.run_commands() File "/home/ashwaq/anaconda3/lib/python3.5/distutils/dist.py", line 955, in run_commands self.run_command(cmd) File "/home/ashwaq/anaconda3/lib/python3.5/distutils/dist.py", line 974, in run_command cmd_obj.run() File "/home/ashwaq/anaconda3/lib/python3.5/site-packages/Cython/Distutils/old_build_ext.py", line 185, in run _build_ext.build_ext.run(self) File "/home/ashwaq/anaconda3/lib/python3.5/distutils/command/build_ext.py", line 339, in run self.build_extensions() File "/home/ashwaq/anaconda3/lib/python3.5/site-packages/Cython/Distutils/old_build_ext.py", line 193, in build_extensions self.build_extension(ext) File "/home/ashwaq/anaconda3/lib/python3.5/distutils/command/build_ext.py", line 533, in build_extension depends=ext.depends) File "/home/ashwaq/anaconda3/lib/python3.5/distutils/ccompiler.py", line 574, in compile self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts) File "/home/ashwaq/anaconda3/lib/python3.5/distutils/unixccompiler.py", line 120, in _compile raise CompileError(msg) ImportError: Building module libs.box_utils.rotate_polygon_nms failed: ["distutils.errors.CompileError: command 'gcc' failed with exit status 1\n"]

Как я могу решить эту проблему?? Я использую python в Ubuntu

Это тот код, который я использовал

Обновлено:: Я использовал distutils как значение @DavidW, но когда я выполнил приведенную ниже команду, у меня возникла ошибка:

setup.py build_ext --inplace

Compiling rotate_polygon_nms.pyx because it changed. [1/1] Cythonizing rotate_polygon_nms.pyx

Error compiling Cython file:

------------------------------------------------------------ ... import numpy as np ^

rotate_polygon_nms.pyx:1:0: 'R2CNN_FPN_Tensorflow-master.libs.box_utils.rotate_polygon_nms' is not a valid module name Traceback (most recent call last): File "setup.py", line 6, in ext_modules = cythonize("rotate_polygon_nms.pyx"), File "/home/ashwaq/.local/lib/python2.7/site-packages/Cython/Build/Dependencies.py", line 1039, in cythonize cythonize_one(*args) File "/home/ashwaq/.local/lib/python2.7/site-packages/Cython/Build/Dependencies.py", line 1161, in cythonize_one raise CompileError(None, pyx_file) Cython.Compiler.Errors.CompileError: rotate_polygon_nms.pyx

1) Вероятно, вам лучше используя distutils, чем импорт pyx для чего-либо, кроме простейших модулей. 2) Сообщение об ошибке не является полным сообщением об ошибке, а определенно не - полезной частью.

DavidW 19.03.2018 20:48

Я пытался использовать distutils, но он также дает мне эту ошибку> поднять CompileError (None, pyx_file) Cython.Compiler.Errors.CompileError: rotate_polygon_nms.pyx

programmer 19.03.2018 20:58

Если вы получаете такую ​​ошибку, вероятно, это происходит как в distutils, так и в pyximport.

DavidW 19.03.2018 21:00

Покажите нам, как вы запускаете cython с файлом pyx и как компилируете полученный код c. Вы не можете импортировать файл pyx непосредственно в сеанс Python.

hpaulj 19.03.2018 21:00

Я не могу воспроизвести вашу CompileError на основе того, что вы дали ... опять же, более подробная информация (с полными сообщениями об ошибках) была бы полезна

DavidW 19.03.2018 21:02

Я обновил вопрос, пожалуйста, проверьте его еще раз

programmer 19.03.2018 21:17

Верно ... с distutils он в конечном итоге прочитал путь к вашему файлу и решил, что R2CNN_FPN_Tensorflow-master должен быть включен в имя модуля (проблема в -). Я никогда не уверен на 100%, как это исправить, но этого следует избегать. Для pyximport он не находит rotate_gpu_nms.hpp. Возможно, вам потребуется установить включаемый каталог

DavidW 19.03.2018 21:23
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
2 055
0

Другие вопросы по теме