spotify / annoy

Approximate Nearest Neighbors in C++/Python optimized for memory usage and loading/saving to disk
Apache License 2.0
13.15k stars 1.16k forks source link

cann't install on MAC M1 #577

Open ArlanCooper opened 2 years ago

ArlanCooper commented 2 years ago

the error message like this: Using legacy 'setup.py install' for annoy, since package 'wheel' is not installed. Installing collected packages: annoy Running setup.py install for annoy ... error ERROR: Command errored out with exit status 1: command: /Users/cooper/PycharmProjects/faq/venv/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/np/pjvnrzpj65q2p4gv1pfh8nqc0000gn/T/pip-install-gf4q13ts/annoy_789593428b7643f98169824423d770ff/setup.py'"'"'; file='"'"'/private/var/folders/np/pjvnrzpj65q2p4gv1pfh8nqc0000gn/T/pip-install-gf4q13ts/annoy_789593428b7643f98169824423d770ff/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/np/pjvnrzpj65q2p4gv1pfh8nqc0000gn/T/pip-record-dcdyq3od/install-record.txt --single-version-externally-managed --compile --install-headers /Users/cooper/PycharmProjects/faq/venv/include/site/python3.8/annoy cwd: /private/var/folders/np/pjvnrzpj65q2p4gv1pfh8nqc0000gn/T/pip-install-gf4q13ts/annoy_789593428b7643f98169824423d770ff/ Complete output (15 lines): WARNING: The wheel package is not available. running install running build running build_py creating build creating build/lib.macosx-10.14-x86_64-3.8 creating build/lib.macosx-10.14-x86_64-3.8/annoy copying annoy/init.py -> build/lib.macosx-10.14-x86_64-3.8/annoy running build_ext building 'annoy.annoylib' extension creating build/temp.macosx-10.14-x86_64-3.8 creating build/temp.macosx-10.14-x86_64-3.8/src clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -iwithsysroot/System/Library/Frameworks/System.framework/PrivateHeaders -iwithsysroot/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/Headers -arch arm64 -arch x86_64 -Werror=implicit-function-declaration -I/Users/cooper/PycharmProjects/faq/venv/include -I/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/include/python3.8 -c src/annoymodule.cc -o build/temp.macosx-10.14-x86_64-3.8/src/annoymodule.o -D_CRT_SECURE_NO_WARNINGS -march=native -O3 -ffast-math -fno-associative-math -std=c++11 -mmacosx-version-min=10.9 clang: error: the clang compiler does not support '-march=native' error: command 'clang' failed with exit status 1

ERROR: Command errored out with exit status 1: /Users/cooper/PycharmProjects/faq/venv/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/np/pjvnrzpj65q2p4gv1pfh8nqc0000gn/T/pip-install-gf4q13ts/annoy_789593428b7643f98169824423d770ff/setup.py'"'"'; file='"'"'/private/var/folders/np/pjvnrzpj65q2p4gv1pfh8nqc0000gn/T/pip-install-gf4q13ts/annoy_789593428b7643f98169824423d770ff/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/np/pjvnrzpj65q2p4gv1pfh8nqc0000gn/T/pip-record-dcdyq3od/install-record.txt --single-version-externally-managed --compile --install-headers /Users/cooper/PycharmProjects/faq/venv/include/site/python3.8/annoy Check the logs for full command output.

my computer is MAC M1, how to install,thanks

yauhenAI2 commented 2 years ago

Hi, I've installed annoy on M1 successfully following the steps:

  1. Create virtual env and activate it (optional)
  2. Install with pip:
    (annoy) user@local Desktop % pip3 install annoy      
    Collecting annoy
    Downloading annoy-1.17.0.tar.gz (646 kB)
     |████████████████████████████████| 646 kB 443 kB/s            
    Preparing metadata (setup.py) ... done
    Building wheels for collected packages: annoy
    Building wheel for annoy (setup.py) ... done
    Created wheel for annoy: filename=annoy-1.17.0-cp39-cp39-macosx_12_0_arm64.whl size=55704 sha256=44c6d6a0f519ef122e04ca6db077a2d9c78402fd5f11bbdfbd77f30f785fa20c
    Stored in directory: /Users/user/Library/Caches/pip/wheels/71/d0/7a/354f18c65441aacd7e2806fe7e0d2f827da30e89683eb788bb
    Successfully built annoy
    Installing collected packages: annoy
    Successfully installed annoy-1.17.0
    WARNING: You are using pip version 21.3; however, version 21.3.1 is available.
    You should consider upgrading via the '/Users/user/Desktop/annoy/bin/python -m pip install --upgrade pip' command.
  3. Run a test example to confirm it works (optional):
    (annoy) user@local Desktop % python3
    Python 3.9.9 (main, Nov 21 2021, 03:16:13) 
    [Clang 13.0.0 (clang-1300.0.29.3)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from annoy import AnnoyIndex
    >>> import random
    >>> 
    >>> f = 40
    >>> t = AnnoyIndex(f, 'angular')  # Length of item vector that will be indexed
    >>> for i in range(1000):
    ...     v = [random.gauss(0, 1) for z in range(f)]
    ...     t.add_item(i, v)
    ... 
    >>> t.build(10) # 10 trees
    True
    >>> t.save('test.ann')
    True
    >>> 
    >>> # ...
    >>> 
    >>> u = AnnoyIndex(f, 'angular')
    >>> u.load('test.ann') # super fast, will just mmap the file
    True
    >>> print(u.get_nns_by_item(0, 1000)) # will find the 1000 nearest neighbors
    [0, 138, 99, ... 976,...957]
excited-tiger commented 2 years ago

Hi, I've installed annoy on M1 successfully following the steps:

use python 3.9

tidalmelon commented 2 years ago

would build wheel with unsupported tag ('cp39', 'cp39', 'macosx_11_0_arm64')

amayuelas commented 2 years ago

I am getting the same error on a Mac M1, Python 3.9.10

clang-13: error: the clang compiler does not support '-march=native'

amayuelas commented 2 years ago

As mentioned in #567

To solve this issue you

export CC=/usr/bin/clang ; 
export CXX=/usr/bin/clang++

Then install annoy: pip install annoy

simongcc commented 5 months ago

@amayuelas Thanks for this clue. So that when I check with clang command. Found out the XCode user agreeement is not yet checked. The compilation failed with similar error. The reason is very unobvious. After checking the agreement, it works as expected.