无法在 Python 3.10 上安装 numba

Can't install numba on Python 3.10

Python 3.10 Mac 运行 OS 11.6.1

我从我的机器上卸载了 Python 3.9 并升级到 3.10 版。安装 pandas、scipy 等标准软件包没有问题。但是一个软件包 epycom 需要 numba。

当我输入 pip3 install numba 时,我收到下面带有关键字 FileNotFoundError: [Errno 2] No such file or directory: 'llvm-config'

的冗长错误消息

想知道我是否应该卸载 3.10 并返回到 3.9?

Collecting numba
  Using cached numba-0.51.2.tar.gz (2.1 MB)
  Preparing metadata (setup.py) ... done
Collecting llvmlite<0.35,>=0.34.0.dev0
  Using cached llvmlite-0.34.0.tar.gz (107 kB)
  Preparing metadata (setup.py) ... done
Requirement already satisfied: numpy>=1.15 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from numba) (1.22.0)
Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from numba) (58.1.0)
Using legacy 'setup.py install' for numba, since package 'wheel' is not installed.
Using legacy 'setup.py install' for llvmlite, since package 'wheel' is not installed.
Installing collected packages: llvmlite, numba
    Running setup.py install for llvmlite ... error
    ERROR: Command errored out with exit status 1:
     command: /Library/Frameworks/Python.framework/Versions/3.10/bin/python3.10 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/6j/xqx91xb15wl81pcnf33255bct7pzn4/T/pip-install-42hw6q4a/llvmlite_a0abee749e71467a998628e47a3a1a24/setup.py'"'"'; __file__='"'"'/private/var/folders/6j/xqx91xb15wl81pcnf33255bct7pzn4/T/pip-install-42hw6q4a/llvmlite_a0abee749e71467a998628e47a3a1a24/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/6j/xqx91xb15wl81pcnf33255bct7pzn4/T/pip-record-6u_7985j/install-record.txt --single-version-externally-managed --compile --install-headers /Library/Frameworks/Python.framework/Versions/3.10/include/python3.10/llvmlite
         cwd: /private/var/folders/6j/xqx91xb15wl81pcnf33255bct7pzn4/T/pip-install-42hw6q4a/llvmlite_a0abee749e71467a998628e47a3a1a24/
    Complete output (29 lines):
    running install
    running build
    got version from file /private/var/folders/6j/xqx91xb15wl81pcnf33255bct7pzn4/T/pip-install-42hw6q4a/llvmlite_a0abee749e71467a998628e47a3a1a24/llvmlite/_version.py {'version': '0.34.0', 'full': 'c5889c9e98c6b19d5d85ebdd982d64a03931f8e2'}
    running build_ext
    /Library/Frameworks/Python.framework/Versions/3.10/bin/python3.10 /private/var/folders/6j/xqx91xb15wl81pcnf33255bct7pzn4/T/pip-install-42hw6q4a/llvmlite_a0abee749e71467a998628e47a3a1a24/ffi/build.py
    LLVM version... Traceback (most recent call last):
      File "/private/var/folders/6j/xqx91xb15wl81pcnf33255bct7pzn4/T/pip-install-42hw6q4a/llvmlite_a0abee749e71467a998628e47a3a1a24/ffi/build.py", line 105, in main_posix
        out = subprocess.check_output([llvm_config, '--version'])
      File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/subprocess.py", line 420, in check_output
        return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
      File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/subprocess.py", line 501, in run
        with Popen(*popenargs, **kwargs) as process:
      File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/subprocess.py", line 966, in __init__
        self._execute_child(args, executable, preexec_fn, close_fds,
      File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/subprocess.py", line 1842, in _execute_child
        raise child_exception_type(errno_num, err_msg, err_filename)
    FileNotFoundError: [Errno 2] No such file or directory: 'llvm-config'
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/private/var/folders/6j/xqx91xb15wl81pcnf33255bct7pzn4/T/pip-install-42hw6q4a/llvmlite_a0abee749e71467a998628e47a3a1a24/ffi/build.py", line 191, in <module>
        main()
      File "/private/var/folders/6j/xqx91xb15wl81pcnf33255bct7pzn4/T/pip-install-42hw6q4a/llvmlite_a0abee749e71467a998628e47a3a1a24/ffi/build.py", line 185, in main
        main_posix('osx', '.dylib')
      File "/private/var/folders/6j/xqx91xb15wl81pcnf33255bct7pzn4/T/pip-install-42hw6q4a/llvmlite_a0abee749e71467a998628e47a3a1a24/ffi/build.py", line 107, in main_posix
        raise RuntimeError("%s failed executing, please point LLVM_CONFIG "
    RuntimeError: llvm-config failed executing, please point LLVM_CONFIG to the path for llvm-config
    error: command '/Library/Frameworks/Python.framework/Versions/3.10/bin/python3.10' failed with exit code 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /Library/Frameworks/Python.framework/Versions/3.10/bin/python3.10 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/6j/xqx91xb15wl81pcnf33255bct7pzn4/T/pip-install-42hw6q4a/llvmlite_a0abee749e71467a998628e47a3a1a24/setup.py'"'"'; __file__='"'"'/private/var/folders/6j/xqx91xb15wl81pcnf33255bct7pzn4/T/pip-install-42hw6q4a/llvmlite_a0abee749e71467a998628e47a3a1a24/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/6j/xqx91xb15wl81pcnf33255bct7pzn4/T/pip-record-6u_7985j/install-record.txt --single-version-externally-managed --compile --install-headers /Library/Frameworks/Python.framework/Versions/3.10/include/python3.10/llvmlite Check the logs for full command output.
fishbacp@fishbacpK0ML85 ~ % pip3 install llvm
ERROR: Could not find a version that satisfies the requirement llvm (from versions: none)
ERROR: No matching distribution found for llvm

根据在 Github 上提交的历史问题,numba 在采用新的 Python 版本方面进展缓慢;我的猜测是它目前不支持 Python 3.10.

参考:

https://github.com/numba/llvmlite/issues/621

https://github.com/numba/llvmlite/issues/531

直接取自llvmlite documentation

这怎么会成为一个问题。

如果您使用的是不受支持的架构(即不是 x86*)或不受支持的 Python 二进制轮版本(例如 Python alphas),则 pip 将尝试从 sdist 构建 Numba,这反过来将尝试从 sdist 构建 llvmlite。这将不可避免地失败,因为 llvmlite 源代码分发需要适当的 LLVM 安装才能构建。

如果你使用的是 < 19.0 的 pip,那么 manylinux2010 wheels 将不会安装,你最终会遇到 1 中的情况。即不受支持的东西,所以从 sdist 构建。

从历史上看,此问题表现为以下错误消息,在此逐字记录以供将来参考:

FileNotFoundError: [Errno 2] No such file or directory: 'llvm-config'

“修复”它的方法……

如果您在 x86* 上使用 <19.0 的 pip,请尽可能更新它,这样您就可以使用 manylinux2010 二进制轮。

如果您使用的架构不受支持,例如 Raspberry Pi,请使用可用的 conda。

否则:您可能需要从源代码构建,这意味着提供 LLVM。如果你有可用的 conda,你可以使用它来 bootstrap 安装一个有效的 llvm/llvmdev 包。在下面的手动构建部分中了解有关从源代码编译的更多信息。并特别注意使用 LLVM_CONFIG 环境变量来指定 LLVM 安装位置。

已经有人指出了 numba 的 LLVM-config 问题。根据 GitHub links,我会尝试降级 LLVM,因为 GitHub link 指出 LLVM 9 还不受支持。我可能不正确,希望这对您有所帮助!