在使用 numpy.distutils.core.setup 之前安装 numpy

Installing numpy before using numpy.distutils.core.setup

我正在使用 numpy.distutils 设置一个包含 frotran 模块的包 (mypackage)。问题是,如果我在没有 numpy 的环境中执行 pip install mypackage,我会收到以下错误:

ModuleNotFoundError: No module named 'numpy'

简单的解决方案是让用户(如果我有的话)在他们安装我的包之前pip install numpy,但我认为这不是一个非常优雅解决方案。

我想出了在导入 numpy 之前只用 setup_requires=['numpy'] 调用 setuptools.setup 的想法,它似乎运行良好。这是我的 setup.py:

import setuptools

setuptools.setup(
    setup_requires=[
        'numpy'
    ],)

from numpy.distutils.core import setup, Extension

mod = Extension(name='mypackage.amodule', sources=['source/a.f90'])

setup(name='mypackage',
      packages=['mypackage'],
      ext_modules=[mod],)

老实说,我不完全理解调用空 setup()(没有名称,没有包)意味着什么。 这是一个好的解决方案吗?这是某种不好的做法吗?

这是一个常见问题。如何安装 build-time 依赖项?您可能想要使用 pyproject.toml 文件并利用 build-system 功能。参见 PEP517。这里有一个例子:

[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "numpy"]

使用 pep517 tool 构建分布(sdistwheel)。