błąd clang: nieznany argument: '-mno-fused-madd' (błąd instalacji pakietu python)

272

Podczas próby instalacji psycopg2przez pip na Mavericks 10.9 pojawia się następujący błąd :

clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future]

Nie wiem, jak postępować i szukałem tego i innego miejsca w poszukiwaniu tego konkretnego błędu. Każda pomoc jest mile widziana!

Oto pełne dane wyjściowe z pip:

$ pip install psycopg2
Downloading/unpacking psycopg2
  Downloading psycopg2-2.5.2.tar.gz (685kB): 685kB downloaded
  Running setup.py (path:/private/var/folders/0z/ljjwsjmn4v9_zwm81vhxj69m0000gn/T/pip_build_tino/psycopg2/setup.py) egg_info for package psycopg2

Installing collected packages: psycopg2
  Running setup.py install for psycopg2
    building 'psycopg2._psycopg' extension
    cc -fno-strict-aliasing -fno-common -dynamic -arch x86_64 -arch i386 -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch x86_64 -arch i386 -pipe -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.5.2 (dt dec pq3 ext)" -DPG_VERSION_HEX=0x090303 -DPSYCOPG_EXTENSIONS=1 -DPSYCOPG_NEW_BOOLEAN=1 -DHAVE_PQFREEMEM=1 -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I. -I/usr/local/Cellar/postgresql/9.3.3/include -I/usr/local/Cellar/postgresql/9.3.3/include/server -c psycopg/psycopgmodule.c -o build/temp.macosx-10.9-intel-2.7/psycopg/psycopgmodule.o
    clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future]
    clang: note: this will be a hard error (cannot be downgraded to a warning) in the future
    error: command 'cc' failed with exit status 1
    Complete output from command /usr/bin/python -c "import setuptools, tokenize;__file__='/private/var/folders/0z/ljjwsjmn4v9_zwm81vhxj69m0000gn/T/pip_build_tino/psycopg2/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/0z/ljjwsjmn4v9_zwm81vhxj69m0000gn/T/pip-bnWiwB-record/install-record.txt --single-version-externally-managed --compile:
    running install

running build

running build_py

creating build

creating build/lib.macosx-10.9-intel-2.7

creating build/lib.macosx-10.9-intel-2.7/psycopg2

copying lib/__init__.py -> build/lib.macosx-10.9-intel-2.7/psycopg2

copying lib/_json.py -> build/lib.macosx-10.9-intel-2.7/psycopg2

copying lib/_range.py -> build/lib.macosx-10.9-intel-2.7/psycopg2

copying lib/errorcodes.py -> build/lib.macosx-10.9-intel-2.7/psycopg2

copying lib/extensions.py -> build/lib.macosx-10.9-intel-2.7/psycopg2

copying lib/extras.py -> build/lib.macosx-10.9-intel-2.7/psycopg2

copying lib/pool.py -> build/lib.macosx-10.9-intel-2.7/psycopg2

copying lib/psycopg1.py -> build/lib.macosx-10.9-intel-2.7/psycopg2

copying lib/tz.py -> build/lib.macosx-10.9-intel-2.7/psycopg2

creating build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/__init__.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/dbapi20.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/dbapi20_tpc.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_async.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_bug_gc.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_bugX000.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_cancel.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_connection.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_copy.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_cursor.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_dates.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_extras_dictcursor.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_green.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_lobject.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_module.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_notify.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_psycopg2_dbapi20.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_quote.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_transaction.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_types_basic.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_types_extras.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/test_with.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/testconfig.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

copying tests/testutils.py -> build/lib.macosx-10.9-intel-2.7/psycopg2/tests

running build_ext

building 'psycopg2._psycopg' extension

creating build/temp.macosx-10.9-intel-2.7

creating build/temp.macosx-10.9-intel-2.7/psycopg

cc -fno-strict-aliasing -fno-common -dynamic -arch x86_64 -arch i386 -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch x86_64 -arch i386 -pipe -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.5.2 (dt dec pq3 ext)" -DPG_VERSION_HEX=0x090303 -DPSYCOPG_EXTENSIONS=1 -DPSYCOPG_NEW_BOOLEAN=1 -DHAVE_PQFREEMEM=1 -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I. -I/usr/local/Cellar/postgresql/9.3.3/include -I/usr/local/Cellar/postgresql/9.3.3/include/server -c psycopg/psycopgmodule.c -o build/temp.macosx-10.9-intel-2.7/psycopg/psycopgmodule.o

clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future]

clang: note: this will be a hard error (cannot be downgraded to a warning) in the future

error: command 'cc' failed with exit status 1

----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools, tokenize;__file__='/private/var/folders/0z/ljjwsjmn4v9_zwm81vhxj69m0000gn/T/pip_build_tino/psycopg2/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/0z/ljjwsjmn4v9_zwm81vhxj69m0000gn/T/pip-bnWiwB-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /private/var/folders/0z/ljjwsjmn4v9_zwm81vhxj69m0000gn/T/pip_build_tino/psycopg2
tino
źródło
1
Mam ten sam błąd podczas budowania biblioteki C: clang: error: unknown argument: '-mno-fused-madd' ...
huync
10
Ten problem występuje w przypadku dowolnego pakietu Pythona zawierającego moduł C, a nie tylko psycopg2.
alastair

Odpowiedzi:

440

Możesz powiedzieć clang, aby nie zgłaszał tego jako błędu, ustawiając następujące zmienne środowiskowe przed kompilacją:

export CFLAGS=-Qunused-arguments
export CPPFLAGS=-Qunused-arguments

To pip install psycopg2powinno działać.

Miałem to samo, gdy próbowałem pip install lxml.

Edycja: jeśli instalujesz jako superużytkownik (co może się zdarzyć, jeśli próbujesz się do niego dołączyć /Library/Python/2.7/site-packages, natywna, fabrycznie zainstalowana dystrybucja Apple w języku Python, która jest dostarczana z systemem OS X, zamiast innej dystrybucji Python, którą później samodzielnie zainstalowałeś ), musisz to zrobić zgodnie z opisem @Thijs Kuipers w komentarzach poniżej:

sudo -E pip install psycopg2

lub równoważny, dla dowolnej innej nazwy pakietu, którą możesz zastąpić zamiast psycopg2.

AKTUALIZACJA [2014-05-16]: Apple rozwiązało ten problem ze zaktualizowanymi pytonami systemowymi (2.7, 2.6 i 2.5), OS X 10.9.3więc obejście nie jest już konieczne w przypadku korzystania z najnowszych Mavericks i Xcode 5.1+. Jednak na razie obejście jest nadal wymagane OS X 10.8.x(Mountain Lion, obecnie 10.8.5), jeśli go używasz Xcode 5.1+.

użytkownik3405578
źródło
2
Miałem ten problem greenletz instalacją za pomocą pip. To naprawiło, dzięki.
jbrown
1
To działało dla mnie jako natychmiastowa poprawka, dzięki! Zobacz odpowiedź Paula Kehrera na wyjaśnienie źródła problemu.
tino
5
Jeśli instalujesz jako root, musisz ustawić flagi dla użytkownika root.
ErikAndren,
48
Musiałem dodać -Eflagę, aby sudozaładować zmienne środowiskowe do wykonania roota, jak powiedział @ErikAndren. Najpierw dwa wyżej wymienione exportstwierdzenia, a następnie sudo -E doSomething.
Thijs Kuipers
1
Uratowałem mi życie z Pillow. Dzięki!
Sloy
76

Aktualizacja: 10.9.3 rozwiązuje problem z CPython systemu.

Jest to spowodowane najnowszą aktualizacją Clang firmy Apple, która została dzisiaj dostarczona z Xcode 5.1 i dotyczy wielu osób, więc mam nadzieję, że wkrótce pojawi się poprawka.

Aktualizacja: Nie spodziewałem się, że zwróci to tyle uwagi, ale oto więcej szczegółów: clang 3.4 Apple domyślnie wysyła błędy w przypadku nieznanych flag, ale CPython buduje moduły przy użyciu tego samego zestawu flag, z którymi został skompilowany pierwotnie. System CPython został skompilowany z kilkoma flagami nieznanymi przez clang, co powoduje ten problem. Poniżej przedstawiono aktualne flagi kompilacji CPython Mavericks (10.9.2):

-I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -fno-strict-aliasing -fno-common -dynamic -arch x86_64 -arch i386 -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE

Aby rozwiązać ten problem, masz kilka opcji:

  • Dodaj ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-futuredo swoich flag kompilacji.
  • Przechodzić CFLAGS=""
  • Usuń nieobsługiwane flagi z sysconfigdata.py (jak zauważono w innej odpowiedzi).
  • Skompiluj nowego pytona używając homebrew .
  • Poczekaj na następną aktualizację OS X, która podobno zawiera ponownie skompilowaną wersję Pythona / Ruby, aby usunąć ten problem w czasie wykonywania systemu.
Paul Kehrer
źródło
@paul, ah dzięki za informację. czy jest jakiś sposób, aby być na bieżąco ze statusem tego błędu, o którym wiesz? Chciałbym zaktualizować clang, gdy tylko będzie dostępna poprawka.
tino
2
To nie jest błąd clang, to błąd dystrybucji Apple. Apple nie powinno rozpowszechniać wersji Pythona, która została zbudowana z ustawieniami niezgodnymi z clang 3.4. Zostało to poprawnie naprawione przez Apple, aktualizując interpreter Pythona.
Do
Możesz to sprawdzić, uruchamiając python-config --cflags. Po uruchomieniu na domyślnym Pythonie Apple, pokaże opcje nieznane dla clang 3.4.
Do
czy istnieje rozwiązanie tego problemu, jeśli zaktualizowałem już Xcode 5.1? Wydaje się, że dodanie tych eksportów do bashrc, jak zaproponowano powyżej, nie rozwiązało problemu.
Sean Danzeiser
Do Seana: Na moim Macu nie mam ~/.bash_profilebashrc, ale to by wymagało ponownego uruchomienia powłoki, aby zadziałało.
peterjc
63

xCode 5.1

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install psycopg2
Izyda
źródło
świetnie, które pomagają mi zainstalować poduszkę
Nyambaa
Miałem wiele problemów z instalacją psycog2 przez pip i to naprawiło problem. Wielkie dzięki.
Brandon Aaskov
2
Jeśli używasz sudo, sudo musi przejść przed ustawieniem zmiennej środowiskowej. (tj. sudo ARCHFLAGS=... pip install ...)
Joe Freeman
Pracował przy instalacji pycrypto. Dzięki!
Chris Sears,
15

Oto obejście, które polega na usunięciu flagi z instalacji Pythona.

W /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_sysconfigdata.pykilku miejscach ustawiono flagę -mfused-madd/ -mno-fused-madd.

Edytuj ten plik i usuń wszystkie odwołania do tej flagi, którą powinna działać kompilacja:

sudo sed -i '.old' 's/ -m\(no-\)\{0,1\}fused-madd //g' /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_sysconfigdata.py

Musisz również usunąć odpowiednie _sysconfigdata.pyci _sysconfigdata.pyopliki - przynajmniej w moim systemie te pliki nie zostały automatycznie odbudowane:

cd /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/
sudo rm _sysconfigdata.pyo _sysconfigdata.pyc

Pamiętaj, że aby dokonać tych zmian, musisz użyć dostępu do konta root.

użytkownik3405479
źródło
2
To rzeczywiście działało! Musiałem usunąć zarówno _sysconfigdata.pyc, jak i _sysconfigdata.pyo
isubuz
4

Zredagowałem również pojęcie Pythona systemowego o jego oryginalnych flagach kompilacji (tak jak zrobił to @ user3405479). Zamiast edytora użyłem narzędzi wiersza poleceń do edycji pliku „na miejscu” (i-węzeł się zmienia). Skompilowałem również nowe pliki pyo i pyc zamiast pozostawiać je usunięte.

Następujące polecenia są uruchamiane jako root, na przykład pod sudo -i

pushd /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7

sed 's/-mno-fused-madd//g' _sysconfigdata.py \ | diff -p _sysconfigdata.py - | patch -b

python -m py_compile _sysconfigdata.py

python -OO -m py_compile _sysconfigdata.py

popd

Ben
źródło
Dopóki Apple nie naprawi instalacji Pythona, wydaje się to najbardziej praktyczne i ostateczne rozwiązanie. Dzięki za kompletne instrukcje!
ᴠɪɴᴄᴇɴᴛ
4

Użyłem homebrew do zainstalowania postgresql, a następnie chciałem zainstalować psycopg2 w dostarczonym przez system python 2.7 na Mavericks. Aby to zadziałało, skończyło się na tym, że:

sudo ARCHFLAGS="-arch x86_64" CFLAGS=-Wunused-command-line-argument-hard-error-in-future pip install psycopg2
Nathan
źródło
2

Przynajmniej Apple jest tego świadomy, ponieważ ten problem został omówiony w Uwagach do wydania Xcode 5.1 (sekcja Kompilator). Spodziewaj się zaktualizowanego Pythona i Ruby w następnej aktualizacji systemu operacyjnego (kciuki!). Zauważ też, że -Wno-error=unused-command-line-argument-hard-error-in-futureflaga ma być tymczasowym obejściem i zniknie w przyszłości (mam nadzieję, że po naprawieniu Python w systemie!).

Jeśli jesteś opiekunem pakietów Pythona, takim jak ja, i chcesz zaoszczędzić użytkownikom kłopotów z samodzielnym obejściem tego problemu, oto rozwiązanie (oprócz zapewnienia binarnych kół / jaj), które trafia do Twojego setup.pypliku:

from distutils.command.build_ext import build_ext
import subprocess
import sys

# Workaround for OS X 10.9.2 and Xcode 5.1+
# The latest clang treats unrecognized command-line options as errors and the
# Python CFLAGS variable contains unrecognized ones (e.g. -mno-fused-madd).
# See Xcode 5.1 Release Notes (Compiler section) and
# http://stackoverflow.com/questions/22313407 for more details. This workaround
# follows the approach suggested in http://stackoverflow.com/questions/724664.
class build_ext_subclass(build_ext):
    def build_extensions(self):
        if sys.platform == 'darwin':
            # Test the compiler that will actually be used to see if it likes flags
            proc = subprocess.Popen(self.compiler.compiler + ['-v'],
                                    stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                                    universal_newlines=True)
            stdout, stderr = proc.communicate()
            clang_mesg = "clang: error: unknown argument: '-mno-fused-madd'"
            if proc.returncode and stderr.splitlines()[0].startswith(clang_mesg):
                for ext in self.extensions:
                    # Use temporary workaround to ignore invalid compiler option
                    # Hopefully -mno-fused-madd goes away before this workaround!
                    ext.extra_compile_args += ['-Wno-error=unused-command-line-argument-hard-error-in-future']
        build_ext.build_extensions(self)

setup(
    name="mypackage",
    ...
    cmdclass={'build_ext' : build_ext_subclass},
    ...
)
wykluczyć
źródło
1

Żadne z powyższych rozwiązań nie działało dla mnie. Moja sytuacja jest nieco inna. Próbowałem zainstalować rdiff-backup przez homebrew, kiedy otrzymałem ten komunikat o błędzie.

Najwyraźniej mam zarówno domyślny python Apple (2.7.5 @ / usr / bin / python), jak i python Homebrew (2.7.6 @ /usr/local/Cellar/python/2.7.6/bin/python), ale błąd nadchodził z pytona Apple.

Aby rozwiązać problem, w zasadzie zmieniłem pliki binarne Pythona.

Zrobiłem to przez sudo:

  • cp / usr / bin / python / usr / bin / python_orig
  • ln -s /usr/local/Cellar/python/2.7.6/bin/python / usr / bin / python

Następnie „brew install rdiff-backup” powiodło się bez żadnych błędów.

Wreszcie zrobiłem polecenie „mv / usr / bin / python_orig / usr / bin / python”, aby wszystko cofnąć.

Hans Wolkenkratzer
źródło
1

Prawdopodobnie korzystasz z Python 2.7.5

$ python

Python 2.7.5 (default, Aug 25 2013, 00:04:04)  [GCC 4.2.1 Compatible
Apple LLVM 5.0 (clang-500.0.68)] on darwin

Najłatwiejsze rozwiązanie przejdź do www.python.org i zainstaluj Python 2.7.6, który jest zgodny z LLVM 5.1.

Następnie wznieś toast za swoje stare wirtualne środowisko, rmvirtualenv {virtual_env_name} .

Następnie utwórz nową wirtualną środowisko…

mkvirtualenv --no-site-packages -p/Library/Frameworks/Python.framework/Versions/2.7/bin/python {virtual_env_name}

po tym pip powinien działać poprawnie.

affablebloke
źródło
Może chcę wyodrębnić wymagania ze starej env przed opiekaniem;) pip freeze> wymagania.txt
GreenAsJade
1

Amazon Linux [AWS EC2]

Próbowanie pip install paramikodalej Amazon Linux AMI release 2016.09dało mi błąd, który zawierał link do tego postu SO. Tak więc, mimo że nie pasuje do tytułu PO, podzielę się odpowiedzią.

yum install libffi-devel
yum install gcc
yum install openssl-devel
pip install paramiko

Złoty!

Bruno Bronosky
źródło
0

Użyłem pakietu Homebrew Python. Działa dobrze po ponownym wypełnieniu.

Witalij Chamin
źródło
0

Odmiana poprawki _sysconfigdata.py: użyj środowiska wirtualnego

cp /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_sysconfigdata.py ${VIRTUAL_ENV}/lib/python2.7/_sysconfigdata.py

Następnie edytuj swoją kopię na $ {VIRTUAL_ENV} /lib/python2.7/_sysconfigdata.py

Usunąłem wszystkie wystąpienia „-mno-fused-madd”, a następnie kompilacje działały w tym virtualenv.

Nie wymaga korzenia!

Bolson
źródło
0

Dla mnie złe flagi zostały wyraźnie podane w pliku Makefile pakietu. Musiałem więc edytować plik makefile, aby usunąć nierozpoznaną flagę z błędnego pakietu.

mikrofon
źródło
0

Uaktualnienie Homebrew i instalacja unixodbc rozwiązało to dla mnie

brew upgrade
brew install unixodbc
Vipassana Vijayarangan
źródło