error de clang: argumento desconocido: '-mno-fused-madd' (error de instalación del paquete de Python)

272

Recibo el siguiente error cuando intento instalar a psycopg2través de pip en Mavericks 10.9:

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

No estoy seguro de cómo proceder y he buscado aquí y en otros lugares este error en particular. ¡Cualquier ayuda es muy apreciada!

Aquí está la salida completa 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
fuente
1
Tengo el mismo error cuando construyo una biblioteca C: clang: error: argumento desconocido: '-mno-fused-madd' ...
huync
10
Este problema ocurre con cualquier paquete de Python que incluya un módulo C, no solo psycopg2.
alastair

Respuestas:

440

Puede decirle a clang que no genere esto como un error configurando las siguientes variables de entorno antes de la compilación:

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

Entonces pip install psycopg2debería funcionar.

Tenía lo mismo cuando intentaba pip install lxml.

Editar: si está instalando como superusuario (que probablemente sea el caso si está tratando de agregar /Library/Python/2.7/site-packages, la distribución nativa de Python de Apple instalada en fábrica que se envía con OS X, en lugar de alguna otra distribución de Python que posteriormente haya instalado usted mismo) ), entonces deberá hacerlo, como lo describe @Thijs Kuipers en los comentarios a continuación:

sudo -E pip install psycopg2

o el equivalente, para cualquier otro nombre de paquete que pueda sustituir en lugar de psycopg2.

ACTUALIZACIÓN [2014-05-16]: Apple ha solucionado este problema con el sistema actualizado Pythons (2.7, 2.6 y 2.5) por OS X 10.9.3lo que la solución ya no es necesaria cuando se utilizan los últimos Mavericks y Xcode 5.1+. Sin embargo, a partir de ahora, la solución alternativa aún es necesaria para OS X 10.8.x(Mountain Lion, actualmente 10.8.5) si está utilizando Xcode 5.1+allí.

usuario3405578
fuente
2
Tuve este problema al instalar greenletcon pip. Esto lo solucionó, gracias.
jbrown
1
Esto funcionó para mí como una solución inmediata, ¡gracias! Consulte la respuesta de Paul Kehrer para obtener una explicación sobre el origen del problema.
tino
55
Si lo instala como root, debe establecer los indicadores para el usuario root.
ErikAndren
48
Tuve que agregar el -Eindicador a sudopara cargar las variables de entorno para la ejecución raíz como dijo @ErikAndren. Entonces, primero las dos exportdeclaraciones antes mencionadas , seguidas de sudo -E doSomething.
Thijs Kuipers
1
Me salvó la vida con Pillow. ¡Gracias!
Sloy
76

Actualización: 10.9.3 resuelve el problema con el sistema CPython.

Esto es causado por la última actualización de clang de Apple que vino con Xcode 5.1 hoy y está afectando a muchas, muchas personas, por lo que esperamos que pronto aparezca una solución.

Actualización: no esperaba que esto llamara tanto la atención, pero aquí hay más detalles: el clang 3.4 Apple está enviando valores predeterminados para errores en banderas desconocidas, pero CPython construye módulos usando el mismo conjunto de banderas con el que fue compilado originalmente. El sistema CPython fue compilado con varias banderas que son desconocidas por el sonido metálico, causando este problema. Los siguientes son los indicadores de compilación actuales de 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 este problema, tiene algunas opciones:

  • Agregue ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-futurea sus banderas de compilación.
  • Pasar CFLAGS=""
  • Elimine los indicadores no compatibles de sysconfigdata.py (como se indica en otra respuesta).
  • Compila una nueva python usando homebrew .
  • Espere la próxima actualización de OS X, que se rumorea que incluye Python / Ruby recompilado para eliminar este problema en tiempos de ejecución del sistema.
Paul Kehrer
fuente
@paul, ah gracias por la información. ¿Hay alguna manera de mantenerse al día sobre el estado de este error que conoce? Me encantaría actualizar el sonido tan pronto como haya una solución disponible.
tino
2
Eso no es un error clang, es un error de distribución de Apple. Apple no debe distribuir una versión de Python que se haya creado con configuraciones incompatibles con clang 3.4. Apple lo repara correctamente actualizando el intérprete de Python.
Hasta el
Puede validar esto ejecutando python-config --cflags. Cuando se ejecuta en Python predeterminado de Apple, mostrará opciones desconocidas para clang 3.4.
Hasta el
¿Hay alguna solución para esto si ya he actualizado a Xcode 5.1? Agregar esas exportaciones a bashrc como se propuso anteriormente no pareció resolver el problema.
Sean Danzeiser
Para Sean: en mi Mac no tengo ~/.bash_profilebashrc, pero esto necesitaría que reinicies el shell para que surta efecto.
peterjc
63

xCode 5.1

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install psycopg2
Isis
fuente
genial, eso me ayudó a instalar la almohada
Nyambaa
Estaba teniendo muchos problemas con la instalación de psycog2 a través de pip y esto me solucionó el problema. Muchas gracias.
Brandon Aaskov
2
Si está usando sudo, el sudo debe ir antes de configurar la variable de entorno. (es decir, sudo ARCHFLAGS=... pip install ...)
Joe Freeman
Trabajó para instalar pycrypto. ¡Gracias!
Chris Sears
15

Aquí hay una solución que implica eliminar la bandera de la instalación de Python.

En /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_sysconfigdata.pyhay varios lugares donde se establece la bandera -mfused-madd/ -mno-fused-madd.

Edite este archivo y elimine todas las referencias a ese indicador que su compilación debería 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

También debe eliminar los archivos correspondientes _sysconfigdata.pycy _sysconfigdata.pyo, al menos en mi sistema, estos archivos no se reconstruyeron automáticamente:

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

Tenga en cuenta que tiene que usar el acceso raíz para hacer esos cambios.

usuario3405479
fuente
2
Esto de hecho funcionó! Tuve que eliminar tanto _sysconfigdata.pyc como _sysconfigdata.pyo
isubuz
4

También edité la noción de Python del sistema de sus indicadores de compilación originales (como lo hizo @ user3405479). En lugar de un editor, utilicé herramientas de línea de comandos para editar el archivo "en su lugar" (el inodo cambia). También compilé nuevos archivos pyo y pyc en lugar de dejarlos eliminados.

Los siguientes comandos se ejecutan como root, por ejemplo en 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
fuente
Hasta que Apple arregle su instalación de Python, esta parece ser la solución más práctica y definitiva. Gracias por las instrucciones completas!
ᴠɪɴᴄᴇɴᴛ
4

Utilicé homebrew para instalar postgresql, y luego quise instalar psycopg2 en el python 2.7 proporcionado por el sistema en Mavericks. Para que eso funcione, terminé ejecutando esto:

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

Al menos Apple es consciente de esto, ya que este problema se trata en las Notas de versión de Xcode 5.1 (sección del compilador). Espere una actualización de Python y Ruby en la próxima actualización del sistema operativo (¡dedos cruzados!). También tenga en cuenta que el-Wno-error=unused-command-line-argument-hard-error-in-future bandera está destinada a ser una solución temporal y desaparecerá en el futuro (¡con suerte después de que se solucione el sistema Python!).

Si usted es un mantenedor de paquetes de Python como yo y desea ahorrarles a sus usuarios la molestia de solucionarlo ellos mismos, aquí hay una solución (además de proporcionar ruedas / huevos binarios) que se incluye en su setup.pyarchivo:

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
fuente
1

Ninguna de las soluciones anteriores funcionó para mí. Mi situación es un poco diferente. Intenté instalar rdiff-backup a través de homebrew cuando recibí este mensaje de error.

Aparentemente tengo tanto la python predeterminada de Apple (2.7.5 @ / usr / bin / python) como la python de Homebrew (2.7.6 @ /usr/local/Cellar/python/2.7.6/bin/python), pero el error estaba llegando del pitón de Apple.

Para solucionar el problema, básicamente cambié los binarios de Python.

Hice esto a través de sudo:

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

Luego, 'brew install rdiff-backup' tuvo éxito sin ningún error.

Finalmente, hice "mv / usr / bin / python_orig / usr / bin / python" para revertir todo.

Hans Wolkenkratzer
fuente
1

Probablemente estés en 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 solución más fácil vaya a www.python.org e instale Python 2.7.6, que es compatible con LLVM 5.1.

Luego brinda por tu antiguo entorno virtual, rmvirtualenv {virtual_env_name} .

Luego haga un nuevo entorno virtual.

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

pip debería funcionar bien después de esto.

affablebloke
fuente
Es posible que desee extraer los requisitos de su antiguo entorno antes de tostarlo;) pip freeze>
require.txt
1

Amazon Linux [AWS EC2]

Intentando pip install paramikoel Amazon Linux AMI release 2016.09me dio un error que incluía un enlace a este post SO. Entonces, a pesar de que no se ajusta al Título del OP, voy a compartir la respuesta.

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

¡Dorado!

Bruno Bronosky
fuente
0

Utilicé el paquete de homebrew python. Funciona bien después de volver a compilar.

Vitaliy Khamin
fuente
0

Variación en la corrección _sysconfigdata.py: use un entorno virtual

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

Luego edite su copia en $ {VIRTUAL_ENV} /lib/python2.7/_sysconfigdata.py

Eliminé todas las ocurrencias de '-mno-fused-madd' y luego las compilaciones funcionaron en ese virtualenv.

¡No se necesita root!

bolson
fuente
0

Para mí, las banderas malas se dieron explícitamente en el Makefile del paquete. Así que tuve que editar el archivo MAKE para eliminar la marca no reconocida del paquete de error.

Miguel
fuente
0

Actualizar Homebrew e instalar unixodbc lo resolvió por mí

brew upgrade
brew install unixodbc
Vipassana Vijayarangan
fuente