You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pip install . 安装本地C++模块失败,但python3 setup.py install成功,提示找不到已安装的numpy

pip install . 安装本地C++模块失败,但python3 setup.py install成功,提示找不到已安装的numpy

我太懂你这种困惑了——明明numpy已经好好装在全局环境里,直接跑python3 setup.py install能顺利编译安装你的tcore模块,但一用pip install .就报错找不到numpy,还跑去临时目录里瞎找,属实让人摸不着头脑。

问题根源

其实核心原因是pip构建wheel时会默认创建一个隔离的临时构建环境,这个环境和你平时用的全局Python环境是分开的,里面没有预装你全局的numpy。而直接运行setup.py是在当前的Python环境下执行的,自然能找到已经安装的numpy,所以两种方式会有差异。从报错日志里的路径也能看出来,pip用了/private/var/folders/9g/wy6m2s4d705fpzyr78yx0s9w0000gn/T/pip-build-env-1m0z9fie这类临时环境,这个环境里确实没有numpy,所以setup.py里的import numpy就直接失败了。

解决方案

给你两个可行的解决办法,推荐用第一种规范的方式:

1. 声明numpy为构建依赖(推荐)

你需要告诉pip,在构建你的模块之前,必须先安装numpy。现在主流的做法是用pyproject.toml文件来指定构建依赖:
在你的项目根目录创建一个pyproject.toml文件,内容如下:

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

这样pip在启动构建流程前,会自动在隔离环境里安装好这些依赖,之后setup.py里的import numpy就能正常执行了。

如果你还是想通过setup.py来配置,可以用setup_requires参数(不过这个方式现在有点过时了):

from setuptools import setup, Extension

def get_numpy_include():
    # 延迟导入numpy,确保在setup_requires安装完numpy后再执行
    import numpy
    return numpy.get_include()

setup(
    name="tcore",
    version="1.0.0",
    setup_requires=['numpy'],
    ext_modules=[
        Extension(
            'tcore',
            sources=["你的C++源文件路径"],
            include_dirs=[get_numpy_include()],
            extra_compile_args=["-O3", "-std=c++23"]
        )
    ]
)

2. 临时禁用隔离构建环境

如果你只是临时想快速解决问题,可以给pip加--no-build-isolation参数,让它直接在当前Python环境里构建:

pip install . --no-build-isolation

不过这个方法不推荐长期使用,因为不符合现代Python包构建的规范,换个环境可能又会出问题。

验证

修改完配置后,再运行pip install .,应该就能顺利找到numpy并完成你的tcore模块的编译安装了。

备注:内容来源于stack exchange,提问作者PST

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:18:07