У меня есть код 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
Я пытался использовать distutils, но он также дает мне эту ошибку> поднять CompileError (None, pyx_file) Cython.Compiler.Errors.CompileError: rotate_polygon_nms.pyx
Если вы получаете такую ошибку, вероятно, это происходит как в distutils, так и в pyximport.
Покажите нам, как вы запускаете cython с файлом pyx и как компилируете полученный код c. Вы не можете импортировать файл pyx непосредственно в сеанс Python.
Я не могу воспроизвести вашу CompileError на основе того, что вы дали ... опять же, более подробная информация (с полными сообщениями об ошибках) была бы полезна
Я обновил вопрос, пожалуйста, проверьте его еще раз
Верно ... с distutils он в конечном итоге прочитал путь к вашему файлу и решил, что R2CNN_FPN_Tensorflow-master должен быть включен в имя модуля (проблема в -). Я никогда не уверен на 100%, как это исправить, но этого следует избегать. Для pyximport он не находит rotate_gpu_nms.hpp. Возможно, вам потребуется установить включаемый каталог






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