Clang-Fehler: Unbekanntes Argument: '-mno-fused-madd' (Fehler bei der Installation des Python-Pakets)

272

Beim Versuch, psycopg2über pip auf Mavericks 10.9 zu installieren, wird folgende Fehlermeldung angezeigt:

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

Ich bin mir nicht sicher, wie ich vorgehen soll, und habe hier und anderswo nach diesem bestimmten Fehler gesucht. Jede Hilfe wird sehr geschätzt!

Hier ist die vollständige Ausgabe von 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
quelle
1
Ich habe den gleichen Fehler beim Erstellen einer C-Bibliothek: clang: error: unbekanntes Argument: '-mno-fused-madd' ...
huync
10
Dieses Problem tritt bei jedem Python-Paket auf, das ein C-Modul enthält, nicht nur bei psycopg2.
Alastair

Antworten:

440

Sie können clang anweisen, dies nicht als Fehler auszulösen, indem Sie vor der Kompilierung die folgenden Umgebungsvariablen festlegen:

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

Dann pip install psycopg2sollte es funktionieren.

Ich hatte das gleiche, als ich es versuchte pip install lxml.

Bearbeiten: Wenn Sie als Superuser installieren (was wahrscheinlich der Fall ist, wenn Sie versuchen, an /Library/Python/2.7/site-packagesdie native werkseitig installierte Python-Distribution von Apple anzuhängen , die im Lieferumfang von OS X enthalten ist, und nicht an eine andere Python-Distribution, die Sie anschließend selbst installiert haben ), dann müssen Sie tun, wie von @Thijs Kuipers in den Kommentaren unten beschrieben:

sudo -E pip install psycopg2

oder das Äquivalent, für welchen anderen Paketnamen Sie möglicherweise anstelle von ersetzen psycopg2.

UPDATE [2014-05-16]: Apple hat dieses Problem mit aktualisierten Systempythons (2.7, 2.6 und 2.5) behoben, OS X 10.9.3sodass die Problemumgehung bei Verwendung der neuesten Mavericks und nicht mehr erforderlich ist Xcode 5.1+. OS X 10.8.xAb sofort ist die Problemumgehung für (Mountain Lion, derzeit 10.8.5) weiterhin erforderlich , wenn Sie sie Xcode 5.1+dort verwenden.

user3405578
quelle
2
Ich hatte dieses Problem bei der Installation greenletmit pip. Das hat es behoben, danke.
Jbrown
1
Dies funktionierte für mich als sofortige Lösung, danke! In der Antwort von Paul Kehrer finden Sie eine Erklärung zur Ursache des Problems.
Tino
5
Wenn Sie als Root installieren, müssen Sie die Flags für den Root-Benutzer setzen.
ErikAndren
48
Ich musste das -EFlag hinzufügen sudo, um die Umgebungsvariablen für die Root-Ausführung zu laden, wie @ErikAndren sagte. Also zuerst die beiden oben genannten exportAussagen, gefolgt von sudo -E doSomething.
Thijs Kuipers
1
Hat mein Leben mit Pillow gerettet. Vielen Dank!
Sloy
76

Update: 10.9.3 behebt das Problem mit System-CPython.

Dies wird durch das neueste Clang-Update von Apple verursacht, das heute mit Xcode 5.1 geliefert wurde und viele, viele Menschen betrifft. Hoffentlich wird bald ein Fix erscheinen.

Update: Ich hatte nicht erwartet, dass dies so viel Aufmerksamkeit erregt, aber hier ist mehr Detail: Der Clang 3.4 Apple liefert standardmäßig Fehler bei unbekannten Flags, aber CPython erstellt Module mit denselben Flags, mit denen es ursprünglich kompiliert wurde. Das System CPython wurde mit mehreren Flags kompiliert, die durch Klirren unbekannt sind, wodurch dieses Problem verursacht wurde. Im Folgenden sind die aktuellen CPython-Kompilierungsflags von Mavericks (10.9.2) aufgeführt:

-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

Um dieses Problem zu beheben, haben Sie einige Möglichkeiten:

  • Fügen Sie ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-futureIhren Kompilierungsflags hinzu.
  • Bestehen CFLAGS=""
  • Entfernen Sie die nicht unterstützten Flags aus der Datei sysconfigdata.py (wie in einer anderen Antwort angegeben).
  • Kompilieren Sie eine neue Python mit Homebrew .
  • Warten Sie auf das nächste OS X-Update, das angeblich neu kompiliertes Python / Ruby enthält, um dieses Problem für die Systemlaufzeiten zu beheben.
Paul Kehrer
quelle
@ Paul, ah danke für die Info. Gibt es eine Möglichkeit, über den Status dieses Fehlers, den Sie kennen, auf dem Laufenden zu bleiben? Ich würde gerne Clang aktualisieren, sobald ein Fix verfügbar ist.
Tino
2
Das ist kein Clang-Bug, das ist ein Distributions-Bug von Apple. Apple sollte keine Python-Version vertreiben, die mit Einstellungen erstellt wurde, die nicht mit Clang 3.4 kompatibel sind. Es wird ordnungsgemäß behoben, indem Apple den Python-Interpreter aktualisiert.
Bis zum
Sie können dies überprüfen, indem Sie ausführen python-config --cflags. Wenn es auf Apples Standard-Python ausgeführt wird, werden Optionen angezeigt, die Clang 3.4 nicht bekannt sind.
Bis zum
Gibt es eine Lösung dafür, wenn ich bereits auf Xcode 5.1 aktualisiert habe? Das oben vorgeschlagene Hinzufügen dieser Exporte zu bashrc schien das Problem nicht zu lösen.
Sean Danzeiser
Zu Sean: Auf meinem Mac habe ich ~/.bash_profilekein bashrc, aber dazu müssten Sie die Shell neu starten, damit sie wirksam wird.
Peterjc
63

xCode 5.1

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install psycopg2
Isis
quelle
toll, das hilft mir, Kissen zu installieren
Nyambaa
Ich hatte viele Probleme mit der Installation von psycog2 über pip und dies hat das Problem für mich behoben. Vielen Dank.
Brandon Aaskov
2
Wenn Sie sudo verwenden, muss das sudo gehen, bevor die Umgebungsvariable festgelegt wird. (dh sudo ARCHFLAGS=... pip install ...)
Joe Freeman
Arbeitete für die Installation von Pycrypto. Vielen Dank!
Chris Sears
15

Hier ist eine Problemumgehung, bei der das Flag aus der Python-Installation entfernt wird.

In /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_sysconfigdata.pygibt es mehrere Stellen, an denen die -mfused-madd/-mno-fused-madd Flag gesetzt.

Bearbeiten Sie diese Datei und entfernen Sie alle Verweise auf das Flag, das Ihre Kompilierung funktionieren soll:

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

Sie müssen auch die entsprechenden Dateien _sysconfigdata.pycund _sysconfigdata.pyoDateien löschen - zumindest auf meinem System wurden diese Dateien nicht automatisch neu erstellt:

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

Beachten Sie, dass Sie Root-Zugriff verwenden müssen, um diese Änderungen vorzunehmen.

user3405479
quelle
2
Das hat tatsächlich funktioniert! Ich musste sowohl _sysconfigdata.pyc als auch _sysconfigdata.pyo entfernen
isubuz
4

Ich habe auch die Vorstellung des Systempythons von seinen ursprünglichen Kompilierungsflags bearbeitet (wie @ user3405479). Anstelle eines Editors habe ich Befehlszeilentools verwendet, um die Datei "an Ort und Stelle" zu bearbeiten (der Inode ändert sich). Ich habe auch neue Pyo- und Pyc-Dateien kompiliert, anstatt sie gelöscht zu lassen.

Die folgenden Befehle werden als root ausgeführt, z. B. unter 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
quelle
Bis Apple seine Python-Installation repariert, scheint dies die praktischste und definitivste Lösung zu sein. Danke für die vollständige Anleitung!
18.
4

Ich habe Homebrew verwendet, um postgresql zu installieren, und wollte dann psycopg2 in dem vom System bereitgestellten Python 2.7 auf Mavericks installieren. Damit das funktioniert, habe ich Folgendes ausgeführt:

sudo ARCHFLAGS="-arch x86_64" CFLAGS=-Wunused-command-line-argument-hard-error-in-future pip install psycopg2
Nathan
quelle
2

Zumindest Apple ist sich dessen bewusst, da dieses Problem in den Xcode 5.1- Versionshinweisen (Compiler-Abschnitt) behandelt wird. Erwarten Sie beim nächsten Betriebssystem-Update ein aktualisiertes Python und Ruby (Daumen drücken!). Beachten Sie auch, dass das -Wno-error=unused-command-line-argument-hard-error-in-futureFlag als vorübergehende Problemumgehung gedacht ist und in Zukunft nicht mehr angezeigt wird (hoffentlich nachdem das System Python repariert wurde!).

Wenn Sie ein Python-Paketbetreuer wie ich sind und Ihren Benutzern den Aufwand ersparen möchten, dies selbst zu umgehen, finden Sie hier eine Lösung (neben der Bereitstellung von binären Rädern / Eiern), die in Ihre setup.pyDatei aufgenommen wird:

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},
    ...
)
llude
quelle
1

Keine der oben genannten Lösungen hat bei mir funktioniert. Meine Situation ist etwas anders. Ich habe versucht, rdiff-backup über Homebrew zu installieren, als ich diese Fehlermeldung erhielt.

Ich habe anscheinend sowohl Apples Standardpython (2.7.5 @ / usr / bin / python) als auch Homebrews Python (2.7.6 @ /usr/local/Cellar/python/2.7.6/bin/python), aber der Fehler kam aus Apples Python.

Um das Problem zu beheben, habe ich im Grunde die Python-Binärdateien gewechselt.

Ich habe das via sudo gemacht:

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

Dann war 'Brew Install Rdiff-Backup' ohne Fehler erfolgreich.

Schließlich habe ich "mv / usr / bin / python_orig / usr / bin / python" gemacht, um alles zurückzusetzen.

Hans Wolkenkratzer
quelle
1

Sie sind wahrscheinlich auf 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

Die einfachste Lösung finden Sie unter www.python.org. Installieren Sie Python 2.7.6, das mit LLVM 5.1 kompatibel ist.

Dann stoßen Sie auf Ihre alte virtuelle Umgebung an rmvirtualenv {virtual_env_name}.

Dann machen Sie eine neue virtuelle Umgebung.

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

pip sollte danach gut funktionieren.

umgänglicher Kerl
quelle
Vielleicht möchten
1

Amazon Linux [AWS EC2]

Der Versuch, pip install paramikoauf Amazon Linux AMI release 2016.09gab mir einen Fehler, der einen Link zu diesem SO Beitrag enthielt. Also, obwohl es nicht zum Titel des OP passt, werde ich die Antwort teilen.

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

Golden!

Bruno Bronosky
quelle
0

Ich habe Homebrew Python-Paket verwendet. Funktioniert gut nach dem erneuten Kompilieren.

Vitaliy Khamin
quelle
0

Variation des Fixes _sysconfigdata.py: Verwenden Sie eine virtuelle Umgebung

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

Bearbeiten Sie dann Ihre Kopie unter $ {VIRTUAL_ENV} /lib/python2.7/_sysconfigdata.py

Ich habe alle Vorkommen von '-mno-fused-madd' entfernt und dann Builds in dieser virtuellen Umgebung erstellt.

Keine Wurzel benötigt!

Bolson
quelle
0

Für mich wurden die fehlerhaften Flags explizit im Makefile des Pakets angegeben. Also musste ich das Makefile bearbeiten, um das nicht erkannte Flag aus dem fehlerhaften Paket zu entfernen.

Mike
quelle
0

Das Upgrade von Homebrew und die Installation von unixodbc haben es für mich gelöst

brew upgrade
brew install unixodbc
Vipassana Vijayarangan
quelle