erreur de clang: argument inconnu: '-mno-fused-madd' (échec d'installation du package python)

272

J'obtiens l'erreur suivante lors d'une tentative d'installation psycopg2via pip sur Mavericks 10.9:

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

Je ne sais pas comment procéder et j'ai recherché ici et ailleurs cette erreur particulière. Toute aide est très appréciée!

Voici la sortie complète de 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
la source
1
J'ai la même erreur lors de la création d'une bibliothèque C: clang: erreur: argument inconnu: '-mno-fused-madd' ...
huync
10
Ce problème se produit avec tout package Python qui inclut un module C, pas seulement psycopg2.
alastair

Réponses:

440

Vous pouvez dire à clang de ne pas le signaler comme une erreur en définissant les variables d'environnement suivantes avant la compilation:

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

Alors pip install psycopg2devrait fonctionner.

J'ai eu la même chose en essayant pip install lxml.

Modifier: si vous installez en tant que superutilisateur (ce qui sera probablement le cas si vous essayez d'ajouter à /Library/Python/2.7/site-packagesla distribution Python native installée en usine par Apple et livrée avec OS X, plutôt qu'à une autre distribution Python que vous avez ensuite installée vous-même ), alors vous devrez le faire, comme décrit par @Thijs Kuipers dans les commentaires ci-dessous:

sudo -E pip install psycopg2

ou l'équivalent, pour tout autre nom de package que vous pourriez remplacer à la place de psycopg2.

MISE À JOUR [16/05/2014]: Apple a résolu ce problème avec les Pythons système mis à jour (2.7, 2.6 et 2.5) OS X 10.9.3afin que la solution de contournement ne soit plus nécessaire lors de l'utilisation des derniers Mavericks et Xcode 5.1+. Cependant, à partir de maintenant, la solution de contournement est toujours requise pour OS X 10.8.x(Mountain Lion, actuellement 10.8.5) si vous l'utilisez Xcode 5.1+.

user3405578
la source
2
J'ai eu ce problème d'installation greenletavec pip. Cela l'a corrigé, merci.
jbrown
1
Cela a fonctionné pour moi comme solution immédiate, merci! Voir la réponse de Paul Kehrer pour une explication de la source du problème.
tino
5
Si vous installez en tant que root, vous devez définir les indicateurs pour l'utilisateur root.
ErikAndren
48
J'ai dû ajouter le -Edrapeau pour sudocharger les variables d'environnement pour l'exécution root comme l'a dit @ErikAndren. Commençons donc par les deux exportdéclarations susmentionnées , puis par sudo -E doSomething.
Thijs Kuipers
1
J'ai sauvé ma vie avec Pillow. Merci!
Sloy
76

Mise à jour: 10.9.3 résout le problème avec le système CPython.

Cela est dû à la dernière mise à jour de clang d'Apple fournie avec Xcode 5.1 aujourd'hui et affecte de très nombreuses personnes, donc j'espère qu'un correctif apparaîtra bientôt.

Mise à jour: Je ne m'attendais pas à ce que cela reçoive autant d'attention, mais voici plus de détails: le clang 3.4 Apple envoie par défaut des erreurs sur des indicateurs inconnus, mais CPython construit des modules en utilisant le même ensemble d'indicateurs avec lequel il a été compilé à l'origine. Le système CPython a été compilé avec plusieurs indicateurs inconnus par clang, provoquant ainsi ce problème. Les indicateurs de compilation CPython Mavericks (10.9.2) actuels sont les suivants:

-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

Pour résoudre ce problème, vous avez quelques options:

  • Ajoutez ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-futureà vos indicateurs de compilation.
  • Passer CFLAGS=""
  • Supprimez les indicateurs non pris en charge du sysconfigdata.py (comme indiqué dans une autre réponse).
  • Compilez un nouveau python en utilisant l' homebrew .
  • Attendez la prochaine mise à jour d'OS X, qui est censée inclure Python / Ruby recompilé pour supprimer ce problème pour les temps d'exécution du système.
Paul Kehrer
la source
@paul, ah merci pour l'info. existe-t-il un moyen de rester à jour sur l'état de ce bug que vous connaissez? j'aimerais mettre à jour clang dès qu'un correctif est disponible.
tino
2
Ce n'est pas un bug de clang, c'est un bug de distribution d'Apple. Apple ne devrait pas distribuer une version Python qui a été construite avec des paramètres incompatibles avec clang 3.4. Il est correctement corrigé par Apple en mettant à jour l'interpréteur Python.
Jusqu'à
Vous pouvez valider cela en exécutant python-config --cflags. Lorsqu'il est exécuté sur le Python par défaut d'Apple, il affichera des options inconnues à clang 3.4.
Jusqu'à
existe-t-il une solution à cela si j'ai déjà mis à jour vers Xcode 5.1? L'ajout de ces exportations dans bashrc comme proposé ci-dessus ne semble pas résoudre le problème.
Sean Danzeiser
Pour Sean: Sur mon Mac, je n'ai ~/.bash_profilepas bashrc, mais cela nécessiterait que vous redémarriez le shell pour prendre effet.
peterjc
63

xCode 5.1

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install psycopg2
Isis
la source
génial, cela m'aide à installer un oreiller
Nyambaa
J'avais beaucoup de problèmes avec l'installation de psycog2 via pip et cela a résolu le problème pour moi. Un grand merci.
Brandon Aaskov
2
Si vous utilisez sudo, le sudo doit disparaître avant de définir la variable d'environnement. (c.-à-d. sudo ARCHFLAGS=... pip install ...)
Joe Freeman
A travaillé pour l'installation de pycrypto. Merci!
Chris Sears
15

Voici une solution qui consiste à supprimer l'indicateur de l'installation python.

Dans /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_sysconfigdata.pyplusieurs endroits, le drapeau -mfused-madd/ -mno-fused-maddest défini.

Modifiez ce fichier et supprimez toutes les références à cet indicateur, votre compilation devrait fonctionner:

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

Vous devez également supprimer les fichiers correspondants _sysconfigdata.pycet _sysconfigdata.pyo- au moins sur mon système, ces fichiers n'ont pas été automatiquement reconstruits:

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

Notez que vous devez utiliser l'accès root pour effectuer ces modifications.

user3405479
la source
2
Cela a bien fonctionné! J'ai dû supprimer à la fois _sysconfigdata.pyc et _sysconfigdata.pyo
isubuz
4

J'ai également édité la notion du python système de ses drapeaux de compilation d'origine (comme l'a fait @ user3405479). Au lieu d'un éditeur, j'ai utilisé des outils de ligne de commande pour éditer le fichier "en place" (l'inode change). J'ai également compilé de nouveaux fichiers pyo et pyc au lieu de les laisser supprimés.

Les commandes suivantes sont exécutées en tant que root, par exemple sous 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
la source
Jusqu'à ce qu'Apple corrige son installation Python, cela semble la solution la plus pratique et définitive. Merci pour les instructions complètes!
2014
4

J'ai utilisé homebrew pour installer postgresql, puis j'ai voulu installer psycopg2 dans le python 2.7 fourni par le système sur Mavericks. Pour que cela fonctionne, j'ai fini par exécuter ceci:

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

Au moins Apple en est conscient car ce problème est abordé dans les notes de mise à jour de Xcode 5.1 (section Compilateur). Attendez-vous à une mise à jour de Python et Ruby dans la prochaine mise à jour du système d'exploitation (doigts croisés!). Notez également que l' -Wno-error=unused-command-line-argument-hard-error-in-futureindicateur est censé être une solution de contournement temporaire et disparaîtra à l'avenir (avec un peu de chance, une fois le système Python corrigé!).

Si vous êtes un mainteneur de paquets Python comme moi et que vous voulez éviter à vos utilisateurs de contourner cela eux-mêmes, voici une solution (en plus de fournir des roues / œufs binaires) qui va dans votre setup.pyfichier:

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
la source
1

Aucune des solutions ci-dessus n'a fonctionné pour moi. Ma situation est légèrement différente. J'essayais d'installer rdiff-backup via homebrew lorsque j'ai reçu ce message d'erreur.

J'ai apparemment le python par défaut d'Apple (2.7.5 @ / usr / bin / python) et le python de Homebrew (2.7.6 @ /usr/local/Cellar/python/2.7.6/bin/python), mais l'erreur venait du python d'Apple.

Pour résoudre le problème, j'ai essentiellement changé les binaires python.

Je l'ai fait via sudo:

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

Ensuite, «brew install rdiff-backup» a réussi sans aucune erreur.

Enfin, j'ai fait "mv / usr / bin / python_orig / usr / bin / python" pour tout revenir en arrière.

Hans Wolkenkratzer
la source
1

Vous êtes probablement sur 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

La solution la plus simple est d'aller sur www.python.org et d'installer Python 2.7.6 qui est compatible avec le LLVM 5.1.

Faites ensuite griller votre ancien environnement virtuel, rmvirtualenv {virtual_env_name} .

Faites ensuite un nouvel env virtuel.

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

pip devrait bien fonctionner après cela.

affablebloke
la source
Je pourrais vouloir extraire les exigences de votre ancien env avant de le griller;) pip freeze> requirements.txt
GreenAsJade
1

Amazon Linux [AWS EC2]

Essayer de pip install paramikosur Amazon Linux AMI release 2016.09m'a donné une erreur qui comprenait un lien vers ce poste de SO. Donc, même si cela ne correspond pas au titre du PO, je vais partager la réponse.

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

D'or!

Bruno Bronosky
la source
0

J'ai utilisé le package python homebrew . Fonctionne bien après recompilation.

Vitaliy Khamin
la source
0

Variation sur le correctif _sysconfigdata.py: utiliser un environnement virtuel

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

Modifiez ensuite votre copie à $ {VIRTUAL_ENV} /lib/python2.7/_sysconfigdata.py

J'ai supprimé toutes les occurrences de '-mno-fused-madd', puis les builds ont fonctionné dans ce virtualenv.

Aucune racine nécessaire!

bolson
la source
0

Pour moi, les mauvais indicateurs ont été explicitement donnés dans le Makefile du package. J'ai donc dû modifier le makefile pour supprimer l'indicateur non reconnu du package d'erreur.

Mike
la source
0

Mettre à jour Homebrew et installer unixodbc l'a résolu pour moi

brew upgrade
brew install unixodbc
Vipassana Vijayarangan
la source