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

Python 在使用numpy.distutils.core.setup之前安装numpy,python,numpy,installation,setuptools,f2py,Python,Numpy,Installation,Setuptools,F2py,我正在使用numpy.distutils设置一个包含frotran模块的包(mypackage)。问题是,如果我在没有numpy的环境中执行pip安装mypackage,则会出现以下错误: ModuleNotFoundError:没有名为“numpy”的模块 最简单的解决方案是在用户安装我的软件包之前要求他们(如果我有)安装numpy,但我认为这不是一个非常优雅的解决方案 在导入numpy之前,我想到了调用setuptools.setup的想法,只需setup\u requires=['nump

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

ModuleNotFoundError:没有名为“numpy”的模块

最简单的解决方案是在用户安装我的软件包之前要求他们(如果我有)安装numpy,但我认为这不是一个非常优雅的解决方案

在导入numpy之前,我想到了调用
setuptools.setup
的想法,只需
setup\u requires=['numpy']
,它似乎工作得很好。这是我的
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()
(没有名字,没有包)意味着什么这是一个好的解决方案吗?这是一种不好的做法吗?

这是一个常见的问题。如何安装构建时依赖项?您可能希望使用
pyproject.toml
文件并利用
构建系统
功能。看见这里有一个例子:

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

使用来构建发行版(sdist和wheel)。

我已经尝试过,但它似乎无法构建模块(amodule)。可能是因为我必须使用不同的后端吗?@Felix可能会为您的问题添加一个更新,以显示您的进度。在
setup.py
中,确保删除第一个
setuptools.setup(…)
调用。剩下的似乎没问题,我错了;错误是由完全不同的问题引起的。很抱歉,这似乎无法安装numpy。构建工作正常,但python-c“import numpy”返回一个错误。因此,如果您的软件包需要numpy,您仍然应该在
setup.py
install\u requires
中列出它。是吗?@Felix是的,构建时间和安装时间依赖关系可以是两个完全不同的列表。因此,最终可能需要在两者中列出一些依赖项,比如在您的案例中的numpy。