Arn*_*yal 7 c python numpy python-3.x
我正在编写一个小的 C 函数,它应该加速我在 Python 中拥有的较大应用程序的一些计算密集型部分。自然地,我编写了一个包装器来确保我的 C 代码可以与我的 Python numpy 数组无缝对话。一切都很好,我正在使用以下内容setup.py
from distutils.core import setup, Extension
import numpy
module1 = Extension('my_wrapper',
sources = ['my_c_file.c'],
include_dirs=[numpy.get_include()],
extra_compile_args = ['-fopenmp'],
extra_link_args = ['-lgomp'])
setup(name = 'my_wrapper',
version = '1.0',
description = 'Some description here',
ext_modules = [module1])
Run Code Online (Sandbox Code Playgroud)
当我用命令编译它时一切正常python3 setup.py install,代码行为如预期,但我收到以下警告,
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 " \
^
Run Code Online (Sandbox Code Playgroud)
虽然这只是一个警告,但如果可以的话,我仍然想避免这种情况。关于如何做到这一点的任何想法?
这是一个已知问题,它源于 Cython 历史上支持非常旧的numpy版本这一事实。正如cython's doc提到的:
尽管如此,您仍然会从编译器收到如下警告,因为 Cython 使用的是已弃用的 Numpy API:
Run Code Online (Sandbox Code Playgroud).../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]目前,这只是一个您可以忽略的警告。
但是,有几个拉取请求正在进行中,可以在此处找到跟踪进度的父问题。
很快这些警告就会消失。
在上游解决这个问题(如 adrin 提到的)之前,我找到了一种将预处理器符号插入NPY_NO_DEPRECATED_API代码中的方法setup.py,以便抑制警告。将关键字添加define_macros=[args]到您的Extension. 仅将其放入 .h、.cpp 或 .pyx 文件中不会有帮助,因为自动生成的项目 .cpp 文件将看不到预处理器定义。
https://docs.python.org/2.0/dist/node13.html
特别针对OP的情况:
module1 = Extension('my_wrapper', sources = ['my_c_file.c'],
include_dirs=[numpy.get_include()],
extra_compile_args = ['-fopenmp'],
extra_link_args = ['-lgomp']),
define_macros=[('NPY_NO_DEPRECATED_API', 'NPY_1_7_API_VERSION')])
Run Code Online (Sandbox Code Playgroud)
这将添加-DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION到编译行。
公平警告:这样做可能会启用多个新警告,这些警告由于保持与旧版本的兼容性而被抑制。
| 归档时间: |
|
| 查看次数: |
6146 次 |
| 最近记录: |