简体   繁体   中英

How to install numba on Mac M1?

I did manage to install llvmlite thanks this post. However, pip install numba keeps on failing.

So, is there a way to install numba on a Mac M1?

(I think the relevant error lines are the following:

      numba/core/typeconv/typeconv.cpp:30:19: error: expected expression
          bin.push_back({key, val});
                        ^
      1 error generated.
      numba/_dispatcher.cpp:1104:37: warning: offset of on non-POD type 'Dispatcher' [-Winvalid-offsetof]
          {(char*)"_can_compile", T_BOOL, offsetof(Dispatcher, can_compile), 0, NULL },
                                          ^                    ~~~~~~~~~~~
      /Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include/stddef.h:104:24: note: expanded from macro 'offsetof'
      #define offsetof(t, d) __builtin_offsetof(t, d)
                             ^                     ~
      1 warning generated.
      error: Command "clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/opt/homebrew/opt/zlib/include -I/opt/homebrew/opt/bzip2/include -I/opt/homebrew/opt/openblas/include -I/Users/kotchwane/.pyenv/versions/3.10.6/lib/python3.10/site-packages/numpy/core/include -I/Users/kotchwane/.pyenv/versions/3.10.6/include/python3.10 -c numba/core/typeconv/typeconv.cpp -o build/temp.macosx-10.16-arm64-3.10/numba/core/typeconv/typeconv.o" failed with exit status 1

)

Python packages can be distributed either as wheels (meaning, a built version, ready to be used) or as sdists (source distribution, providing only the source code and the instructions on how to build it). ¹

The sdists versions are generally hard to build on M1 architecture.

Although a wheel for Mac M1 is not available currently on the latest numba version ( 0.56.2 ), one has been created for version 0.55.2 ² , so you can use:

pip install numba==0.55.2 

Miniforge is a great way to have install M1 compatible libraries.

conda install numba will automatically install numba 0.55.2 and all the dependencies.
conda instal -c numba numba==0.56.2 will force install 0.56.2 directly from the numba channel (which works for me on M1 Pro and Python 3.9.13).

numba-0.56.2 has Python wheels for arm64 versions of macos, supporting Python versions 3.9.x and 3.10.x, as you can see on the numba PyPI files page .

Since you're on macos Monterey, you should be able to install using the system-provided Python:

# Using venv
❯ /usr/bin/python3 -V
Python 3.9.6
❯ /usr/bin/python3 -m venv .sysvenv
❯ source .sysvenv/bin/activate
❯ pip install numba
Collecting numba
  Downloading numba-0.56.2-cp39-cp39-macosx_11_0_arm64.whl (2.4 MB)
     |████████████████████████████████| 2.4 MB 6.1 MB/s
Collecting numpy<1.24,>=1.18
  Downloading numpy-1.23.3-cp39-cp39-macosx_11_0_arm64.whl (13.4 MB)
     |████████████████████████████████| 13.4 MB 10.2 MB/s
Requirement already satisfied: setuptools<60 in ./.sysvenv/lib/python3.9/site-packages (from numba) (58.0.4)
Collecting llvmlite<0.40,>=0.39.0dev0
  Downloading llvmlite-0.39.1-cp39-cp39-macosx_11_0_arm64.whl (23.1 MB)
     |████████████████████████████████| 23.1 MB 17.3 MB/s
Installing collected packages: numpy, llvmlite, numba
Successfully installed llvmlite-0.39.1 numba-0.56.2 numpy-1.23.3

And you can see the installation works as-is:

❯ python
Python 3.9.6 (default, Aug  5 2022, 15:21:02)
[Clang 14.0.0 (clang-1400.0.29.102)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numba
>>> print(numba.__version__)
0.56.2
>>>
>>> import random
>>>
>>> @njit
... def monte_carlo_pi(nsamples):
...     acc = 0
...     for i in range(nsamples):
...         x = random.random()
...         y = random.random()
...         if (x ** 2 + y ** 2) < 1.0:
...             acc += 1
...     return 4.0 * acc / nsamples
...
>>> monte_carlo_pi(10)
3.2

You also said this in the comments:

Looking at your link, I only find wheels for macosx_11_0_arm64. I thought Mac version 11 was Big Sur, and I am on Monterey?

Wheels don't have to be built supporting the specific OS version, and pip can tell you what tags are compatible with it, if you use debug --verbose .

You can see here that the system-provided Python 3.9 in Monterey is compatible with wheels that have the version/platform/architecture strings for multiple versions of macos:

❯ /usr/bin/python3 -m pip debug --verbose | grep arm64
  cp39-cp39-macosx_12_0_arm64
  cp39-cp39-macosx_11_0_arm64
  cp39-abi3-macosx_12_0_arm64
  cp39-abi3-macosx_11_0_arm64
# etc...

If you are having troubles installing Numba with whatever version of Python you're using, check pip3 debug --verbose and see if you get strings that match the wheel names.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM