python - setup.py 用于依赖于 cython 和 f2py 的包

标签 python numpy cython f2py

我想为一个 python 包创建一个 setup.py 脚本,其中包含几个依赖于 cython 和 f2py 的子模块。我曾尝试使用 setuptools 和 numpy.distutils,但到目前为止都失败了:

使用设置工具

我能够使用 setuptools 编译我的 cython 扩展(并为包的其余部分创建安装)。但是,我一直无法弄清楚如何使用 setuptools 来生成 f2py 扩展。经过大量搜索,我只找到了相当古老的messages like this one声明必须使用 numpy.distutils 编译 f2py 模块。

使用 numpy.distutils

我能够使用 numpy.distutils 编译我的 f2py 扩展(并为包的其余部分创建安装)。但是,我一直无法弄清楚如何让 numpy.distutils 编译我的 cython 扩展,因为它最近总是尝试使用 pyrex 来编译它(而且我正在使用特定于 cython 的扩展)。我已经进行了搜索以弄清楚如何获取 numpy.distutils 用于 cython 文件,并且 - 至少在一年前 - 他们建议应用 monkey patch到 numpy.distutils。似乎应用这样的猴子补丁也限制了可以传递给 Cython 的选项。

我的问题是:为依赖于 f2py 和 cython 的包编写 setup.py 脚本的推荐方法是什么?对 numpy.distutils 应用补丁真的是可行的方法吗?

最佳答案

您可以在 setup.py 中单独调用每个,如
http://answerpot.com/showthread.php?601643-cython%20and%20f2py

# Cython extension
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

setup(
  ext_modules = [Extension( 'cext', ['cext.pyx'] )],
  cmdclass = {'build_ext': build_ext},
  script_args = ['build_ext', '--inplace'],
)

# Fortran extension
from numpy.distutils.core import setup, Extension
setup(
  ext_modules = [Extension( 'fext', ['fext.f90'] )],
)

你的调用上下文(我认为他们调用了这个命名空间,不确定)
必须改变当前对象的扩展和功能
设置()是。

第一个 setup() 调用,它是 distutils.extension.Extension
和 distutils.core.setup()

第二个 setup() 调用,它是 numpy.distutils.core.Extension
和 numpy.distutils.core.setup()

关于python - setup.py 用于依赖于 cython 和 f2py 的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7932028/

相关文章:

python - 来自 pogdesign.co.uk/cat/的数据抓取

javascript - 如何解决 Python Selenium 错误 which

python - 通过cython从c调用python代码

python - 如何将二进制网格图像转换为二维数组?

python - 使用保存的sklearn模型进行预测

python - 赛通/ python : how to catch as exception an external function that "exits" instead of "returns"

python - 使用 SWIG 包装 C/C++ 库

python - 推荐的 Django 设置?

python - 将 cookie 添加到 cookiejar

python - 如何使用numpy中的转换器将时间字符串更改为数字