C或Cython扩展¶
Astropy支持使用C扩展来包装C库,并支持使用Cython来加速计算密集型计算。Cython和C扩展构建都可以使用 get_extensions 功能 setup_package.py 文件。如果已定义,此函数必须返回 setuptools.Extension 物体。但是,子包的创建与子包的创建相关,而子包的创建则与此相关。
而C扩展必须始终通过 get_extensions 机械装置,Cython文件(结束于 .pyx )由自动定位 extension-helpers 如果它们不在 get_extensions . 对于以这种方式定位的Cython扩展,numpy C函数的头包含在构建中,但不包括其他外部头。 .pyx 由返回的扩展名中存在的文件 get_extensions 不包含在自动生成的扩展名列表中。
备注
如果A setuptools.Extension 使用Cython为对象提供源文件 get_extensions 机制,非常重要的是 .pyx 文件作为 source ,而不是 .c 由Cython生成的文件。
使用Numpy C头文件¶
如果您的C或Cython扩展使用 numpy 在C级别,您可能需要访问numpyc头文件。进行此操作时,应使用 numpy.get_include() 指定要使用的include目录,例如:
from setuptools import Extension
import numpy
def get_extensions():
return Extension(name='myextension', sources=['myext.c'],
include_dirs=[numpy.get_include()])
安装C头文件¶
如果您的C扩展需要从其他第三方C代码链接,您可能希望在Python模块旁边安装它的头文件。
创建一个
include所有头文件的目录。使用
[options.package_data]在你的章节setup.cfg在包中包含这些头文件的文件。例如astropy.wcs包中包含以下条目[options.package_data]章节:[options.package_data] ... astropy.wcs = include/*/*.h ...
阻止在生成时导入¶
重要的是要确保 setup_package.py 文件不会触发它们所在的包的导入,因此它们应该能够在不依赖于对包的其他部分的导入的情况下执行。