0

I'm puzzled by the following issue. I have a Mac M3 with the following characteristics.

enter image description here

I have Python 3.12.6. I have been trying to install pyo (https://pypi.org/project/pyo/1.0.1/). After many issues with the location of the headers, I could solve all the "I do not find blablaheader.h" with the following command:

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 

But now I have the following error and it is very puzzling. It looks like a C error syntax on an extension?

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 

I really doubt extensions had this kind of error, so it is most probably a C version issue. Maybe it is C++, and my system only has a C compiler? I do not know.

I really need some "directions" here.

1 Answer 1

1
+50

The answer is that the extension does have a problem. More specifically, it has a syntax error. The author of pyo has omitted the parentheses from the condition expression of the if-statement, which is not permitted in C. Presumably, a previous version of libpython defined the PyList_Check(...) macro with enclosing parentheses that have been removed since then.

The simplest solution is to install a newer version of pyo that has corrected the syntax error; 1.0.4 appears to be the oldest version that has corrected the syntax error. 1.0.5 is the most recent version.

If you absolutely must use version 1.0.1, then you should write a patch. The steps to do that are as follows:

  1. Download a copy of the source code (see this answer)
  2. Locate the problem and fix it.
  3. Install the package from the directory with pip path/to/directory (see this answer)
  4. Repeat from step 2 if compilation still fails.
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.