如何构建使用废弃NumPy API的PyPi包?以kmc2安装为例
解决K-Means 2编译时的NumPy废弃API警告
方案1:调整setup.py中的Extension宏定义
你之前尝试的define_macros参数方向正确,可能是写法细节问题。修改setup.py里的Extension配置,确保宏值以字符串传递(让C预处理器识别NPY_1_7_API_VERSION这个NumPy头文件宏):
import numpy as np from setuptools import setup, Extension module1 = Extension( 'kmc2', sources=['kmc2.c'], extra_compile_args=['-O3'], define_macros=[("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")] ) setup( install_requires=["numpy", "scipy", "scikit-learn", "nose"], ext_modules=[module1], include_dirs=[".", np.get_include()] )
执行重新安装命令:
pip install . --force-reinstall
方案2:直接修改C源文件
如果方案1无效,直接在kmc2.c的最顶部(所有#include语句之前)添加宏定义:
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
这样编译时预处理器会直接启用该宏,屏蔽废弃API警告。
关于NumPy降级的说明
尝试安装NumPy 1.7出现legacy-install-error是因为旧版本不兼容现代Python版本(如3.8及以上),完全没必要降级。问题出在kmc2的编译配置,不需要修改NumPy内部的setup.py。
内容的提问来源于stack exchange,提问作者nini2352
相关产品推荐
相关产品推荐

