'Cytoolz will not install when trying to install eth-brownie

I have been searching for a solution for this for hours with no luck. I'm running a Macbook Air Early 2014, MacOS Catalina 10.15.7, python version 3.9.1. When I run "pipx install eth-brownie" I get the following error code:

Fatal error from pip prevented installation. Full pip output in file:
    /Users/Drew/.local/pipx/logs/cmd_2022-04-24_15.36.57_pip_errors.log

pip failed to build package:
    cytoolz

Some possibly relevant errors from pip install:
    error: subprocess-exited-with-error
    cytoolz/functoolz.c:23087:19: error: implicit declaration of function '_PyGen_Send' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    cytoolz/functoolz.c:23092:19: error: implicit declaration of function '_PyGen_Send' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    cytoolz/functoolz.c:23176:19: error: implicit declaration of function '_PyGen_Send' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    error: command '/usr/bin/clang' failed with exit code 1
    error: legacy-install-failure

Error installing eth-brownie.

When I try to run pip install cytoolz (or any iteration of that), I get the following error code:

    Collecting cytoolz
  Using cached cytoolz-0.11.2.tar.gz (481 kB)
  Preparing metadata (setup.py) ... done
Requirement already satisfied: toolz>=0.8.0 in /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages (from cytoolz) (0.11.2)
Building wheels for collected packages: cytoolz
  Building wheel for cytoolz (setup.py) ... error
  error: subprocess-exited-with-error
  
  × python setup.py bdist_wheel did not run successfully.
  │ exit code: 1
  ╰─> [64 lines of output]
      [1/5] Cythonizing cytoolz/utils.pyx
      [2/5] Cythonizing cytoolz/dicttoolz.pyx
      [3/5] Cythonizing cytoolz/functoolz.pyx
      [4/5] Cythonizing cytoolz/itertoolz.pyx
      [5/5] Cythonizing cytoolz/recipes.pyx
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.macosx-10.9-x86_64-cpython-38
      creating build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/compatibility.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/_version.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/__init__.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/_signatures.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      creating build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/curried
      copying cytoolz/curried/operator.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/curried
      copying cytoolz/curried/__init__.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/curried
      copying cytoolz/curried/exceptions.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/curried
      copying cytoolz/itertoolz.pyx -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/dicttoolz.pyx -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/functoolz.pyx -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/recipes.pyx -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/utils.pyx -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/utils.pxd -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/__init__.pxd -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/recipes.pxd -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/functoolz.pxd -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/dicttoolz.pxd -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/cpython.pxd -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/itertoolz.pxd -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      creating build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_none_safe.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_utils.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_curried.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_compatibility.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_embedded_sigs.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_functoolz.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_inspect_args.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_doctests.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_tlz.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_signatures.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/dev_skip_test.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_recipes.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_docstrings.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_dev_skip_test.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_dicttoolz.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_serialization.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_curried_toolzlike.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_itertoolz.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      running build_ext
      building 'cytoolz.dicttoolz' extension
      creating build/temp.macosx-10.9-x86_64-cpython-38
      creating build/temp.macosx-10.9-x86_64-cpython-38/cytoolz
      gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch x86_64 -g -I/Library/Frameworks/Python.framework/Versions/3.8/include/python3.8 -c cytoolz/dicttoolz.c -o build/temp.macosx-10.9-x86_64-cpython-38/cytoolz/dicttoolz.o
      In file included from /usr/local/lib/gcc/x86_64-apple-darwin15.6.0/7.1.0/include-fixed/syslimits.h:7:0,
                       from /usr/local/lib/gcc/x86_64-apple-darwin15.6.0/7.1.0/include-fixed/limits.h:34,
                       from /Library/Frameworks/Python.framework/Versions/3.8/include/python3.8/Python.h:11,
                       from cytoolz/dicttoolz.c:19:
      /usr/local/lib/gcc/x86_64-apple-darwin15.6.0/7.1.0/include-fixed/limits.h:194:15: fatal error: limits.h: No such file or directory
       #include_next <limits.h>  /* recurse down to the real one */
                     ^~~~~~~~~~
      compilation terminated.
      error: command '/usr/local/bin/gcc' 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 cytoolz
  Running setup.py clean for cytoolz
Failed to build cytoolz
Installing collected packages: cytoolz
  Running setup.py install for cytoolz ... error
  error: subprocess-exited-with-error
  
  × Running setup.py install for cytoolz did not run successfully.
  │ exit code: 1
  ╰─> [66 lines of output]
      [1/5] Cythonizing cytoolz/utils.pyx
      [2/5] Cythonizing cytoolz/dicttoolz.pyx
      [3/5] Cythonizing cytoolz/functoolz.pyx
      [4/5] Cythonizing cytoolz/itertoolz.pyx
      [5/5] Cythonizing cytoolz/recipes.pyx
      running install
      /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
        warnings.warn(
      running build
      running build_py
      creating build
      creating build/lib.macosx-10.9-x86_64-cpython-38
      creating build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/compatibility.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/_version.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/__init__.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/_signatures.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      creating build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/curried
      copying cytoolz/curried/operator.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/curried
      copying cytoolz/curried/__init__.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/curried
      copying cytoolz/curried/exceptions.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/curried
      copying cytoolz/itertoolz.pyx -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/dicttoolz.pyx -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/functoolz.pyx -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/recipes.pyx -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/utils.pyx -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/utils.pxd -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/__init__.pxd -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/recipes.pxd -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/functoolz.pxd -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/dicttoolz.pxd -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/cpython.pxd -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      copying cytoolz/itertoolz.pxd -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz
      creating build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_none_safe.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_utils.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_curried.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_compatibility.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_embedded_sigs.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_functoolz.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_inspect_args.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_doctests.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_tlz.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_signatures.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/dev_skip_test.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_recipes.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_docstrings.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_dev_skip_test.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_dicttoolz.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_serialization.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_curried_toolzlike.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      copying cytoolz/tests/test_itertoolz.py -> build/lib.macosx-10.9-x86_64-cpython-38/cytoolz/tests
      running build_ext
      building 'cytoolz.dicttoolz' extension
      creating build/temp.macosx-10.9-x86_64-cpython-38
      creating build/temp.macosx-10.9-x86_64-cpython-38/cytoolz
      gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch x86_64 -g -I/Library/Frameworks/Python.framework/Versions/3.8/include/python3.8 -c cytoolz/dicttoolz.c -o build/temp.macosx-10.9-x86_64-cpython-38/cytoolz/dicttoolz.o
      In file included from /usr/local/lib/gcc/x86_64-apple-darwin15.6.0/7.1.0/include-fixed/syslimits.h:7:0,
                       from /usr/local/lib/gcc/x86_64-apple-darwin15.6.0/7.1.0/include-fixed/limits.h:34,
                       from /Library/Frameworks/Python.framework/Versions/3.8/include/python3.8/Python.h:11,
                       from cytoolz/dicttoolz.c:19:
      /usr/local/lib/gcc/x86_64-apple-darwin15.6.0/7.1.0/include-fixed/limits.h:194:15: fatal error: limits.h: No such file or directory
       #include_next <limits.h>  /* recurse down to the real one */
                     ^~~~~~~~~~
      compilation terminated.
      error: command '/usr/local/bin/gcc' failed with exit code 1
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: legacy-install-failure

× Encountered error while trying to install package.
╰─> cytoolz

note: This is an issue with the package mentioned above, not pip.
hint: See above for output from the failure.

As other have suggested, I tried running pip install cython first, then trying to install cytoolz. No luck. I tried changing my python version to 3.9.1. No luck. I tried running pip install eth-brownie, python3 -m pip install --user eth-brownie, etc. No luck. I tried running xcode-select --install. No luck. I tried so many other things that I've forgotten, to no avail.

It feels like I've exhausted every single possible related article/github issue, none of the suggested fixes have worked for me. What must I do to get this to properly download and work?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source