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

Python3.11.4(MacOS13.4.1)pip install -e安装包时Numpy导入失败

问题:pip安装自定义包时构建环境无法导入Numpy

在MacOS 13.4.1 + Python 3.11.4环境下,执行pip3 install -e gemvms安装自定义包时,构建环境报错ModuleNotFoundError: No module named 'numpy',但本地交互式Python环境能正常导入Numpy。重装Python 3.11和Numpy后问题依旧,该包曾在Python 3.11.1环境用相同配置正常构建。

执行命令及报错信息

tlh:prog/python % pip3 install -e gemvms
Obtaining file:///Users/tlh/prog/python/gemvms
  Installing build dependencies ... done
  Checking if build backend supports build_editable ... done
  Getting requirements to build editable ... error
  error: subprocess-exited-with-error
  
  × Getting requirements to build editable did not run successfully.
  │ exit code: 1
  ╰─> [30 lines of output]
      /Users/tlh/prog/python/gemvms/gemvms/__init__.py:15: UserWarning: warn test
        warn("warn test")
      Traceback (most recent call last):
        File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 132, in get_requires_for_build_editable
          return hook(config_settings)
                 ^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/t9/tmj9gs9146jcqc1p0lh2c4bc000314/T/pip-build-env-tmurvx_a/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 450, in get_requires_for_build_editable
          return self.get_requires_for_build_wheel(config_settings)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/t9/tmj9gs9146jcqc1p0lh2c4bc000314/T/pip-build-env-tmurvx_a/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 341, in get_requires_for_build_wheel
          return self._get_build_requires(config_settings, requirements=['wheel'])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/t9/tmj9gs9146jcqc1p0lh2c4bc000314/T/pip-build-env-tmurvx_a/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 323, in _get_build_requires
          self.run_setup()
        File "/private/var/folders/t9/tmj9gs9146jcqc1p0lh2c4bc000314/T/pip-build-env-tmurvx_a/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 488, in run_setup
          self).run_setup(setup_script=setup_script)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/t9/tmj9gs9146jcqc1p0lh2c4bc000314/T/pip-build-env-tmurvx_a/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 338, in run_setup
          exec(code, locals())
        File "<string>", line 13, in <module>
        File "/Users/tlh/prog/python/gemvms/gemvms/__init__.py", line 19, in <module>
          from .data    import VMSData
        File "/Users/tlh/prog/python/gemvms/gemvms/data.py", line 55, in <module>
          import numpy as np
      ModuleNotFoundError: No module named 'numpy'
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× Getting requirements to build editable did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

原因分析

pip在安装包时会创建隔离的构建环境,这个环境和本地交互式Python的site-packages完全独立。报错是因为执行setup.py过程中,代码导入了包内的data.py模块,而该模块依赖numpy,但此时构建环境尚未安装numpy,因此触发导入错误。

解决方案

方案1:避免在构建阶段导入包内模块(推荐)

这是Python包开发的最佳实践,不要在setup.py执行时导入包内任何模块。比如如果setup.py是通过导入包来获取版本号,改成直接读取文件的方式:

# 替换setup.py中导入包的代码
with open("gemvms/__init__.py", "r", encoding="utf-8") as f:
    for line in f:
        if line.startswith("__version__"):
            __version__ = line.split("=")[1].strip().strip('"').strip("'")
            break

方案2:配置构建依赖,让pip提前安装numpy

在项目根目录创建pyproject.toml文件,添加以下内容,告知pip构建环境需要numpy:

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

之后再执行pip3 install -e gemvms,pip会先在隔离构建环境中安装numpy,再执行构建流程。

方案3:临时禁用构建隔离(不推荐)

执行安装命令时加上--no-build-isolation参数,让pip直接使用当前Python环境的依赖:

pip3 install -e gemvms --no-build-isolation

注意:该方法会污染全局Python环境,可能导致依赖冲突,仅作为临时应急方案。

内容的提问来源于stack exchange,提问作者Thomas Hayward

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:17:48