erro de clang: argumento desconhecido: '-mno-fused-madd' (falha na instalação do pacote python)

272

Recebo o seguinte erro ao tentar instalar psycopg2via pip no Mavericks 10.9:

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

Não tenho certeza de como proceder e procurei aqui e em outros lugares por esse erro específico. Qualquer ajuda é muito apreciada!

Aqui está a saída completa do 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
fonte
1
Eu tenho mesmo erro quando construir uma biblioteca C: clang: erro: argumento desconhecido: '-mno-fundida-Madd' ...
huync
10
Esse problema ocorre com qualquer pacote Python que inclua um módulo C, não apenas com o psycopg2.
precisa

Respostas:

440

Você pode dizer ao clang para não gerar isso como um erro, definindo as seguintes variáveis ​​de ambiente antes da compilação:

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

Então pip install psycopg2deve funcionar.

Eu tive o mesmo ao tentar pip install lxml.

Editar: se você estiver instalando como superusuário (o que provavelmente será o caso se você estiver tentando anexar a /Library/Python/2.7/site-packages, a distribuição Python nativa instalada na fábrica da Apple que é fornecida com o OS X, em vez de outra distribuição Python que você instalou posteriormente ), será necessário fazer isso, conforme descrito por @Thijs Kuipers nos comentários abaixo:

sudo -E pip install psycopg2

ou equivalente, por qualquer outro nome de pacote que você possa substituir no lugar de psycopg2 .

ATUALIZAÇÃO [16-05-2014]: A Apple corrigiu esse problema com o sistema Pythons atualizado (2.7, 2.6 e 2.5) OS X 10.9.3para que a solução alternativa não seja mais necessária ao usar os Mavericks e os mais recentes Xcode 5.1+. No entanto, a partir de agora, a solução alternativa ainda é necessária para OS X 10.8.x(Mountain Lion, atualmente 10.8.5) se você estiver usando Xcode 5.1+lá.

user3405578
fonte
2
Eu tive esse problema ao instalar greenletcom o pip. Isso resolveu, obrigado.
jbrown
1
Isso funcionou para mim como uma solução imediata, obrigado! Veja a resposta de Paul Kehrer para uma explicação sobre a origem do problema.
Tino
5
Se você instalar como root, precisará definir os sinalizadores para o usuário root.
ErikAndren
48
Eu tive que adicionar o -Esinalizador para sudocarregar as variáveis ​​de ambiente para execução raiz, como disse o @ErikAndren. Então, primeiro as duas exportdeclarações acima mencionadas , seguidas por sudo -E doSomething.
Thijs Kuipers
1
Salvou minha vida com travesseiro. Obrigado!
Sloy 29/03/14
76

Atualização: 10.9.3 resolve o problema com o sistema CPython.

Isso é causado pela mais recente atualização de clang da Apple que veio com o Xcode 5.1 hoje e está afetando muitas pessoas, por isso espero que uma correção apareça em breve.

Atualização: Não esperava que isso chamasse muita atenção, mas aqui está mais detalhes: o clang 3.4 Apple está enviando padrões para erros em sinalizadores desconhecidos, mas o CPython cria módulos usando o mesmo conjunto de sinalizadores com os quais foi compilado originalmente. O sistema CPython foi compilado com vários sinalizadores desconhecidos pelo clang, causando esse problema. A seguir estão os sinalizadores de compilação atuais do Mavericks (10.9.2) CPython:

-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

Para resolver esse problema, você tem algumas opções:

  • Adicionar ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future aos seus sinalizadores de compilação.
  • Passar CFLAGS=""
  • Retire os sinalizadores não suportados do sysconfigdata.py (conforme observado em outra resposta).
  • Compile um novo python usando homebrew .
  • Aguarde a próxima atualização do OS X, que pode incluir Python / Ruby recompilado para remover esse problema durante os tempos de execução do sistema.
Paul Kehrer
fonte
@ Paul, ah obrigado pela informação. existe uma maneira de manter-se atualizado sobre o status desse bug que você conhece? Eu adoraria atualizar o clang assim que uma correção estiver disponível.
tino
2
Isso não é um bug do clang, é um bug da distribuição da Apple. A Apple não deve distribuir uma versão Python criada com configurações incompatíveis com o clang 3.4. É corrigido corretamente pela Apple, atualizando o interpretador Python.
Até
Você pode validar isso executando python-config --cflags. Ao ser executado no Python padrão da Apple, ele mostrará opções desconhecidas para o clang 3.4.
Até
existe uma solução para isso se eu já atualizei para o Xcode 5.1? A adição dessas exportações ao bashrc, conforme proposto acima, não pareceu resolver o problema.
Sean Danzeiser
Para Sean: No meu Mac, ~/.bash_profilenão tenho o bashrc, mas seria necessário reiniciar o shell para entrar em vigor.
Peterjc
63

xCode 5.1

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install psycopg2
Isis
fonte
grande, que me ajudam a instalar travesseiro
Nyambaa
Eu estava tendo muitos problemas com a instalação do psycog2 via pip e isso corrigiu o problema para mim. Muito obrigado.
Brandon Aaskov
2
Se você estiver usando o sudo, o sudo precisará ir antes de definir a variável de ambiente. (isto é, sudo ARCHFLAGS=... pip install ...)
Joe Freeman
Trabalhou para instalar o pycrypto. Obrigado!
Chris Sears
15

Aqui está uma solução alternativa que envolve a remoção do sinalizador da instalação do python.

Em /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_sysconfigdata.pyvários lugares onde o sinalizador -mfused-madd/ -mno-fused-maddestá definido.

Edite esse arquivo e remova todas as referências a esse sinalizador que sua compilação deve funcionar:

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

Você precisa excluir os arquivos correspondentes _sysconfigdata.pyce _sysconfigdata.pyotambém - pelo menos no meu sistema, esses arquivos não foram reconstruídos automaticamente:

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

Observe que é necessário usar o acesso root para fazer essas alterações.

user3405479
fonte
2
Isso realmente funcionou! Eu tinha que remover tanto _sysconfigdata.pyc e _sysconfigdata.pyo
isubuz
4

Também editei a noção do python do sistema de seus sinalizadores de compilação originais (como @ user3405479). Em vez de um editor, usei ferramentas de linha de comando para editar o arquivo "no local" (o inode é alterado). Também compilei novos arquivos pyo e pyc em vez de deixá-los excluídos.

Os seguintes comandos são executados como root, por exemplo, em 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
fonte
Até a Apple corrigir sua instalação em Python, essa parece a solução mais prática e definitiva. Obrigado pelas instruções completas!
ᴠɪɴᴄᴇɴᴛ
4

Usei o homebrew para instalar o postgresql e depois quis instalar o psycopg2 no python 2.7 fornecido pelo sistema no Mavericks. Para que isso funcionasse, acabei executando o seguinte:

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

Pelo menos a Apple está ciente disso, pois esse problema é discutido nas Notas de versão do Xcode 5.1 (seção Compilador). Espere um Python e Ruby atualizados na próxima atualização do SO (dedos cruzados!). Observe também que o -Wno-error=unused-command-line-argument-hard-error-in-futuresinalizador deve ser uma solução temporária e desaparecerá no futuro (esperemos que o sistema Python seja corrigido!).

Se você é um mantenedor de pacotes Python como eu e deseja economizar para os usuários o trabalho de contornar isso eles mesmos, aqui está uma solução (além de fornecer rodas / ovos binários) que entra no seu setup.pyarquivo:

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},
    ...
)
iludir
fonte
1

Nenhuma das soluções acima funcionou para mim. Minha situação é um pouco diferente. Eu estava tentando instalar o rdiff-backup via homebrew quando recebi esta mensagem de erro.

Aparentemente, eu tenho o python padrão da Apple (2.7.5 @ / usr / bin / python) e o python do Homebrew (2.7.6 @ /usr/local/Cellar/python/2.7.6/bin/python), mas o erro estava chegando do python da Apple.

Para corrigir o problema, basicamente troquei os binários python.

Eu fiz isso via sudo:

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

Em seguida, o 'brew install rdiff-backup' foi bem-sucedido sem erros.

Finalmente, eu fiz "mv / usr / bin / python_orig / usr / bin / python" para reverter tudo de volta.

Hans Wolkenkratzer
fonte
1

Você provavelmente está no 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

Solução mais fácil, vá para www.python.org e instale o Python 2.7.6, que é compatível com o LLVM 5.1.

Então brinde seu antigo ambiente virtual rmvirtualenv {virtual_env_name},.

Então faça um novo ambiente virtual ..

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

O pip deve funcionar bem depois disso.

affablebloke
fonte
Pode querer extrair os requisitos da sua idade env antes de brindar-lo;) congelamento pip> requirements.txt
GreenAsJade
1

Amazon Linux [AWS EC2]

Tentando pip install paramikoon Amazon Linux AMI release 2016.09me deu um erro que incluía um link para este post SO. Portanto, mesmo que não se encaixe no título do OP, vou compartilhar a resposta.

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

Dourado!

Bruno Bronosky
fonte
0

Eu usei o pacote python homebrew . Funciona bem após a recompilação.

Vitaliy Khamin
fonte
0

Variação na correção _sysconfigdata.py: use um ambiente virtual

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

Em seguida, edite sua cópia em $ {VIRTUAL_ENV} /lib/python2.7/_sysconfigdata.py

Eu removi todas as ocorrências de '-mno-fused-madd' e depois as compilações funcionaram nesse virtualenv.

Nenhuma raiz é necessária!

bolson
fonte
0

Para mim, as sinalizações ruins foram explicitamente fornecidas no Makefile do pacote. Então eu tive que editar o makefile para remover o sinalizador não reconhecido do pacote com erro.

Mike
fonte
0

Atualizar o Homebrew e instalar o unixodbc resolveu isso para mim

brew upgrade
brew install unixodbc
Vipassana Vijayarangan
fonte