在 m3 上的 mac os x 上安装 pyo 时出现编译错误

问题描述 投票:0回答:1

我对以下问题感到困惑。我有一台 Mac M3,具有以下特点。

enter image description here

我有Python 3.12.6。我一直在尝试安装 pyo (https://pypi.org/project/pyo/1.0.1/)。在标题位置出现许多问题之后,我可以使用以下命令解决所有“我找不到 blablaheader.h”:

pip3 install --global-option='build_ext' --global-option='-I/opt/homebrew/Cellar/portaudio/19.7.0/include’ --global-option='-L/opt/homebrew/Cellar/portaudio/19.7.0/lib’ pyo==1.0.1

但是现在我出现了以下错误,非常令人费解。它看起来像是扩展上的 C 错误语法?

clang -fno-strict-overflow -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -I/opt/homebrew/include/ -I/opt/homebrew/Cellar/unixodbc/2.3.12/include -DUSE_PORTAUDIO -DUSE_PORTMIDI -DUSE_OSC -Iinclude -I/usr/include -I/usr/local/include -I/opt/local/include -I/Users/alejandro/projects/generate-music/venv/include -I/opt/homebrew/opt/[email protected]/Frameworks/Python.framework/Versions/3.12/include/python3.12 -c src/objects/bandsplitmodule.c -o build/temp.macosx-14.0-arm64-cpython-312/src/objects/bandsplitmodule.o -Wno-strict-prototypes -Wno-strict-aliasing -O3 -g0 -DNDEBUG
      src/objects/bandsplitmodule.c:1639:8: error: expected '(' after 'if'
          if PyList_Check(arg) {
             ^
      /opt/homebrew/opt/[email protected]/Frameworks/Python.framework/Versions/3.12/include/python3.12/listobject.h:25:5: note: expanded from macro 'PyList_Check'
          PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
          ^
      /opt/homebrew/opt/[email protected]/Frameworks/Python.framework/Versions/3.12/include/python3.12/object.h:971:41: note: expanded from macro 'PyType_FastSubclass'
      #define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
                                              ^
      1 error generated.
      error: command '/usr/bin/clang' failed with exit code 1
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for pyo
Failed to build pyo

我真的怀疑扩展程序有这种错误,所以很可能是 C 版本问题。也许是C++,而我的系统只有C编译器?我不知道。

我真的需要一些“方向”。

compiler-errors python-extensions pyo
1个回答
0
投票

答案是扩展确实有问题。更具体地说,它有一个语法错误。

pyo
的作者在 if 语句的条件表达式中省略了括号,这在 C 中是不允许的。据推测,之前版本的
libpython
定义了
PyList_Check(...)
宏,其中的括号已被删除那么。

最简单的解决方案是安装较新版本的

pyo
,该版本已更正语法错误; 1.0.4 似乎是纠正了语法错误的最旧版本。 1.0.5 是最新版本。

如果你绝对必须使用1.0.1版本,那么你应该编写一个补丁。执行此操作的步骤如下:

  1. 下载源代码的副本(参见此答案
  2. 找到问题并解决它。
  3. 使用
    pip path/to/directory
    从目录安装软件包(参见此答案
  4. 如果编译仍然失败,请重复步骤2。
© www.soinside.com 2019 - 2024. All rights reserved.