错误:无法使用 PEP 517 构建 Scipy 的 wheels,因此无法直接安装。

197
我试图在我的64位ARMV8开发板上通过pip安装scipy。我已经安装了scipy所需的openblas,所以没有问题。当我输入 pip3 install scipy --trusted-host pypi.org --trusted-host files.pythonhosted.org时,出现错误Failed building wheel for scipy。我在/usr/bin中有pip3和pip3.5,而其余的pip在/usr/lib64/python3.5/site-packages中。因此,基本上我也有pip。
我还尝试使用--no-binary选项安装scipy,这是网上的一个答案之一。但是,它给了我相同的错误。以下是我得到的错误信息:ERROR:
Collecting scipy
  Downloading scipy-1.4.1.tar.gz (24.6 MB)
     |################################| 24.6 MB 6.6 MB/s 
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Building wheels for collected packages: scipy
  Building wheel for scipy (PEP 517) ... error
  ERROR: Command errored out with exit status 1:
   command: /usr/bin/python3 /usr/lib64/python3.5/site-packages/pip-20.0.2-py3.5.egg/pip/_vendor/pep517/_in_process.py build_wheel /tmp/tmpkklsvv4v
       cwd: /tmp/pip-install-9v4nmof7/scipy
  Complete output (50 lines):
  /usr/bin/python3: No module named pip
  Traceback (most recent call last):
    File "/usr/lib64/python3.5/site-packages/setuptools/installer.py", line 128, in fetch_build_egg
      subprocess.check_call(cmd)
    File "/usr/lib64/python3.5/subprocess.py", line 271, in check_call
      raise CalledProcessError(retcode, cmd)
  subprocess.CalledProcessError: Command '['/usr/bin/python3', '-m', 'pip', '--disable-pip-version-check', 'wheel', '--no-deps', '-w', '/tmp/tmpp7fvgp36', '--quiet', 'numpy>=1.13.3']' returned non-zero exit status 1

  During handling of the above exception, another exception occurred:

  Traceback (most recent call last):
    File "/usr/lib64/python3.5/site-packages/pip-20.0.2-py3.5.egg/pip/_vendor/pep517/_in_process.py", line 257, in <module>
      main()
    File "/usr/lib64/python3.5/site-packages/pip-20.0.2-py3.5.egg/pip/_vendor/pep517/_in_process.py", line 240, in main
      json_out['return_val'] = hook(**hook_input['kwargs'])
    File "/usr/lib64/python3.5/site-packages/pip-20.0.2-py3.5.egg/pip/_vendor/pep517/_in_process.py", line 182, in build_wheel
      metadata_directory)
    File "/usr/lib64/python3.5/site-packages/setuptools/build_meta.py", line 213, in build_wheel
      wheel_directory, config_settings)
    File "/usr/lib64/python3.5/site-packages/setuptools/build_meta.py", line 198, in _build_with_temp_dir
      self.run_setup()
    File "/usr/lib64/python3.5/site-packages/setuptools/build_meta.py", line 250, in run_setup
      self).run_setup(setup_script=setup_script)
    File "/usr/lib64/python3.5/site-packages/setuptools/build_meta.py", line 143, in run_setup
      exec(compile(code, __file__, 'exec'), locals())
    File "setup.py", line 540, in <module>
      setup_package()
    File "setup.py", line 536, in setup_package
      setup(**metadata)
    File "/usr/lib64/python3.5/site-packages/numpy/distutils/core.py", line 126, in setup
      dist = setup(**new_attr)
    File "/usr/lib64/python3.5/site-packages/numpy/distutils/core.py", line 169, in setup
      return old_setup(**new_attr)
    File "/usr/lib64/python3.5/site-packages/setuptools/__init__.py", line 143, in setup
      _install_setup_requires(attrs)
    File "/usr/lib64/python3.5/site-packages/setuptools/__init__.py", line 138, in _install_setup_requires
      dist.fetch_build_eggs(dist.setup_requires)
    File "/usr/lib64/python3.5/site-packages/setuptools/dist.py", line 698, in fetch_build_eggs
      replace_conflicting=True,
    File "/usr/lib64/python3.5/site-packages/pkg_resources/__init__.py", line 783, in resolve
      replace_conflicting=replace_conflicting
    File "/usr/lib64/python3.5/site-packages/pkg_resources/__init__.py", line 1066, in best_match
      return self.obtain(req, installer)
    File "/usr/lib64/python3.5/site-packages/pkg_resources/__init__.py", line 1078, in obtain
      return installer(requirement)
    File "/usr/lib64/python3.5/site-packages/setuptools/dist.py", line 754, in fetch_build_egg
      return fetch_build_egg(self, req)
    File "/usr/lib64/python3.5/site-packages/setuptools/installer.py", line 130, in fetch_build_egg
      raise DistutilsError(str(e))
  distutils.errors.DistutilsError: Command '['/usr/bin/python3', '-m', 'pip', '--disable-pip-version-check', 'wheel', '--no-deps', '-w', '/tmp/tmpp7fvgp36', '--quiet', 'numpy>=1.13.3']' returned non-zero exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for scipy
Failed to build scipy
ERROR: Could not build wheels for scipy which use PEP 517 and cannot be installed directly

/usr/bin/python3 --version/usr/bin/python3 -m pip --version - phd
@phd:/usr/bin/python3 --version 显示的是 Python 3.5.3,而 /usr/bin/python3 -m pip --version 则显示 没有找到pip模块 - Sourabrt
1
你需要安装pip - phd
@phd:我已经安装了pip。/usr/bin/pip3 --version的输出为**pip 20.0.2 from /usr/lib64/python3.5/site-packages/pip-20.0.2-py3.5.egg/pip (python 3.5)**。 - Sourabrt
哦,/usr/lib64/python3.5/site-packagessys.path中,但不在/usr/lib64/python3.5/site-packages/pip-20.0.2-py3.5.egg/中。奇怪的配置。您确定/usr/bin/python3/usr/bin/python3.5是同一版本的Python吗?/usr/bin/python3.5 -m pip --versionhead -1 /usr/bin/pip3head -1 /usr/bin/pip3.5 - phd
显示剩余3条评论
30个回答

211

我也遇到了opencv-python的相同问题。对我有效的是更新pip:

pip3 install --upgrade pip

注意:我正在在 Linux 上使用 Docker。


1
谢谢!我一直在折磨自己,试图通过pip安装opencv-python,这解决了问题! - Mr. T
你把这个加入到你的 Dockerfile 里了吗? - Harry Moreno
1
@HarryMoreno 是的,我用 RUN pip3 install --upgrade -i https://mirrors.aliyun.com/pypi/simple pip 安装了。您可以更改存储库以适应您的需求。 - Ahmed Ktob
1
我最终使用了不同的基础镜像 3.8-slim-buster,它默认使用更新版本的 pip。 - Harry Moreno
1
我使用了一个旧的基础镜像(我相信是Python 3.7)。如果它对你有用,那就很酷 xD。 - Ahmed Ktob
显示剩余5条评论

83

我遇到了同样的问题。在运行下面的命令后,我解决了这个问题。

pip install --upgrade pip setuptools wheel

23
尝试在 Python 3.9.4、pip 21.0.1 和 macOS Big Sur 11.2.3(20D91) 上安装 scipy 1.6.2 时,此方法无效。仍会出现与原问题相同的错误。 - Greg Hilston
4
阅读您的错误输出!这应该是这个问题的去应答 - 因为它允许包管理器适当地处理。如果仍然失败,那可能是因为您仅仅阅读了错误消息的最后一行。对于我自己而言,我被卡在了一个运行Python2.7(业务)的应用程序上,不得不安装python2-dev(旧版本),因为Python.h头文件与版本指针不匹配。 - Elysiumplain
我仍然得到了错误 错误:无法调用pkg-config - bjm88
@GregHilston Python 3.9有什么解决方案?我也遇到了同样的问题。 - user9920500
@user9920500 我不确定哈,这是两年前的事情了 :) - Greg Hilston

33

我的问题不在于scipy,而是在于xmlsec。错误信息几乎相同:

ERROR: Could not build wheels for xmlsec which use PEP 517 and cannot be installed directly

我需要这个库,因为它是Python3-saml的依赖项。从文档中我了解到他们首先安装这些软件包:

sudo apt-get install libxml2-dev libxmlsec1-dev

在完成这个步骤后,python3-saml的安装对我来说起作用了。

pip3 -V
pip 20.2.3

python -V
Python 3.8.0b3

可能其他库的答案不同,但它们都需要某些包才能构建,您应该找出适合您的是哪个包。


1
我使用macOSx系统,因此homebrew无法找到libxml2-dev和libxmlsec1-dev。尝试使用brew install libxml2安装,但没有帮助。仍然出现错误:无法调用pkg-config。错误:无法为使用PEP 517的xmlsec构建轮,因此无法直接安装。 - bjm88
@bjm88,这对你来说不是问题,因为libxml2库已经随OS X一起安装了。我不太了解OS X,但也许你可以尝试找到安装libxml2-dev的解决方案。在这里查看答案:https://dev59.com/s4Tba4cB1Zd3GeqP6HAc - makkasi

22

这个错误也会出现在numpy上,如果你正在使用新的M1芯片,恐怕你需要以不同的方式安装numpy等软件包。请参考这里


我不想直接编辑你的回答,因为这可能会被视为自我推销……但是如果你能测试并确认它有效,分享一下可能会帮助其他人。我已经成功地在TF 2.5上加速了M1+GPU的训练。这是我的环境:https://github.com/ctrahey/m1-tensorflow-config - Chris Trahey

10

直接执行

pip install p5py
pip install PEP517

这将完成工作。


2
对我没用。在Windows上安装jq时,我遇到了这个错误。 - A.R.

6

我曾经在使用命令 pip install pandas 安装pandas与Jupyter(Ubuntu)时遇到了麻烦:

构建pandas的wheels失败,错误信息为ERROR: Could not build wheels for pandas which use PEP 517 and cannot be installed directly

以下是我采用的解决方案:

pip install --upgrade pip setuptools wheel

那么

pip install pandas -i https://pypi.mirrors.ustc.edu.cn/simple/

6

我在尝试安装 tidyms 包时遇到了问题(需要 scipy <= 1.4.1)。

在我的情况下,使用 Python 3.8 替代 Python 3.9 “解决”了这个问题(至少可以安装)。


6

我遇到了同样的问题。看起来pip使用了pkg-config - 如果它在您的主机操作系统中缺失,它将导致此错误。我通过以下方式解决了这个问题:

sudo apt-get install -y pkg-config

然后重新运行pip


4
在我的情况下,我正在使用以下命令从一个名为 requirements.txt 的文件安装软件包:

pip install -r requirements.txt

但是出现了这个错误。我通过单独安装这个软件包 (pip install scipy) 并将 requirements.txt 中的 Scipy 版本替换为可用的版本来解决了这个问题。

4

我遇到了类似的问题。我不得不安装一些操作系统,然后才能安装缺失的scikit包(在我的情况下是scikit-sparse)。

sudo apt-get install libsuitesparse-dev

非常感谢,这对于数字海洋部署中的问题有所帮助。 - Mae Cana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接