ошибка clang: неизвестный аргумент: '-mno-fused-madd' (ошибка установки пакета python)

272

Я получаю следующую ошибку при попытке установить psycopg2pip на Mavericks 10.9:

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

Не уверен, как действовать, и искал здесь и в других местах эту конкретную ошибку. Любая помощь высоко ценится!

Вот полный вывод из 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
источник
1
У меня такая же ошибка при сборке библиотеки C: clang: ошибка: неизвестный аргумент: '-mno-fused-madd' ...
huync
10
Эта проблема возникает с любым пакетом Python, который включает модуль C, а не только psycopg2.
alastair

Ответы:

440

Вы можете указать clang не вызывать это как ошибку, установив следующие переменные среды перед компиляцией:

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

Тогда pip install psycopg2должно работать.

У меня было то же самое при попытке pip install lxml.

Изменить: если вы устанавливаете в качестве суперпользователя (что, вероятно, будет иметь место, если вы пытаетесь присоединиться к /Library/Python/2.7/site-packagesисходному дистрибутиву Python, установленному на заводе Apple и поставляемому с OS X, а не к другому дистрибутиву Python, который вы впоследствии установили самостоятельно ), то вам нужно будет сделать, как описано @Thijs Kuipers в комментариях ниже:

sudo -E pip install psycopg2

или эквивалент, для любого другого имени пакета, которое вы можете заменить вместо psycopg2.

ОБНОВЛЕНИЕ [2014-05-16]: Apple исправила эту проблему с обновленными системными Pythons (2.7, 2.6 и 2.5), OS X 10.9.3поэтому обходной путь больше не требуется при использовании последних Mavericks и Xcode 5.1+. Однако, на данный момент, обходной путь все еще требуется для OS X 10.8.x(Mountain Lion, в настоящее время 10.8.5), если вы используете Xcode 5.1+там.

user3405578
источник
2
У меня была эта проблема при установке greenletс pip. Это исправлено, спасибо.
августа
1
Это сработало для меня как немедленное решение, спасибо! См. Ответ Пола Керера для объяснения источника проблемы.
Тино
5
Если вы устанавливаете от имени пользователя root, вам нужно установить флаги для пользователя root.
ЭрикАндрен
48
Мне пришлось добавить -Eфлаг для sudoзагрузки переменных окружения для выполнения root, как сказал @ErikAndren. Итак, сначала два вышеупомянутых exportутверждения, а затем sudo -E doSomething.
Тийс Кейперс
1
Спасли мою жизнь с подушкой. Спасибо!
Слой
76

Обновление: 10.9.3 решает проблему с системой CPython.

Это вызвано последним обновлением Clang от Apple, которое вышло сегодня с Xcode 5.1 и затрагивает многих, поэтому, надеюсь, исправление скоро появится.

Обновление: не ожидал, что это привлечет столько внимания, но вот более подробно: clang 3.4 Apple поставляет по умолчанию ошибки из-за неизвестных флагов, но CPython собирает модули, используя тот же набор флагов, с которым он был изначально скомпилирован. Система CPython была скомпилирована с несколькими флагами, которые неизвестны clang, таким образом вызывая эту проблему. Ниже приведены текущие флаги компиляции 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

Чтобы решить эту проблему, у вас есть несколько вариантов:

  • Добавьте ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-futureк своим флагам компиляции.
  • Проходить CFLAGS=""
  • Уберите неподдерживаемые флаги из sysconfigdata.py (как отмечено в другом ответе).
  • Скомпилируйте новый python, используя homebrew .
  • Дождитесь следующего обновления OS X, которое, по слухам, будет содержать перекомпилированный Python / Ruby, чтобы устранить эту проблему во время работы системы.
Пол Керер
источник
@ Пол, ах, спасибо за информацию. Есть ли способ оставаться в курсе состояния этой ошибки, о которой вы знаете? Я хотел бы обновить Clang, как только исправление доступно.
Тино
2
Это не ошибка лягушки, это ошибка распространения Apple. Apple не должна распространять версию Python, созданную с настройками, несовместимыми с Clang 3.4. Это исправлено Apple обновлением интерпретатора Python.
до
Вы можете проверить это, запустив python-config --cflags. При запуске на стандартном Python от Apple, он покажет параметры, неизвестные для Clang 3.4.
до
Есть ли решение для этого, если я уже обновился до Xcode 5.1? Добавление этого экспорта в bashrc, как предложено выше, похоже, не решило проблему.
Шон Данзайзер
To Sean: На моем Mac у меня ~/.bash_profileнет bashrc, но для этого вам нужно перезапустить оболочку, чтобы изменения вступили в силу.
peterjc
63

xCode 5.1

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install psycopg2
Isis
источник
здорово, что помогли мне установить подушку
Nyambaa
У меня было много проблем с установкой psycog2 через pip, и это исправило проблему для меня. Огромное спасибо.
Брэндон Аасков
2
Если вы используете sudo, sudo нужно перейти перед установкой переменной окружения. (то есть sudo ARCHFLAGS=... pip install ...)
Джо Фриман
Работал для установки Pycrypto. Спасибо!
Крис Сирс
15

Вот обходной путь, который включает в себя удаление флага из установки Python.

В /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_sysconfigdata.pyнескольких местах установлен флаг -mfused-madd/ -mno-fused-madd.

Отредактируйте этот файл и удалите все ссылки на этот флаг, который должен работать в вашей компиляции:

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

Вам также необходимо удалить соответствующие файлы _sysconfigdata.pycи _sysconfigdata.pyoфайлы - по крайней мере, в моей системе эти файлы не были автоматически восстановлены:

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

Обратите внимание, что для внесения этих изменений необходимо использовать root-доступ.

user3405479
источник
2
Это действительно сработало! Мне пришлось удалить и _sysconfigdata.pyc, и _sysconfigdata.pyo
isubuz
4

Я также отредактировал представление системного питона о его исходных флагах компиляции (как @ user3405479). Вместо редактора я использовал инструменты командной строки для редактирования файла «на месте» (индекс изменяется). Я также скомпилировал новые файлы pyo и pyc вместо того, чтобы оставлять их удаленными.

Следующие команды запускаются от имени пользователя root, например, под 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

Бен
источник
Пока Apple не исправит установку Python, это кажется наиболее практичным и окончательным решением. Спасибо за полные инструкции!
ᴠɪɴᴄᴇɴᴛ
4

Я использовал homebrew для установки postgresql, а затем хотел установить psycopg2 в предоставленный системой python 2.7 на Mavericks. Чтобы заставить это работать, я запустил это:

sudo ARCHFLAGS="-arch x86_64" CFLAGS=-Wunused-command-line-argument-hard-error-in-future pip install psycopg2
Натан
источник
2

По крайней мере, Apple знает об этом, поскольку эта проблема обсуждается в Замечаниях по выпуску Xcode 5.1 (раздел «Компилятор»). Ожидайте обновления Python и Ruby в следующем обновлении ОС (скрестив пальцы!). Также обратите внимание, что -Wno-error=unused-command-line-argument-hard-error-in-futureфлаг предназначен для временного обходного пути и исчезнет в будущем (надеюсь, после исправления системы Python!).

Если вы, как и я, являетесь сопровождающим пакета Python и хотите избавить своих пользователей от необходимости обходить их самостоятельно, вот решение (помимо предоставления двоичных колес / яиц), которое входит в ваш setup.pyфайл:

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
источник
1

Ни одно из вышеперечисленных решений не помогло мне. Моя ситуация немного отличается. Я пытался установить rdiff-backup через homebrew, когда получил это сообщение об ошибке.

По-видимому, у меня есть как стандартный Python от Apple (2.7.5 @ / usr / bin / python), так и Python от Homebrew (2.7.6 @ /usr/local/Cellar/python/2.7.6/bin/python), но ошибка наступала от питона Apple.

Чтобы решить проблему, я переключил двоичные файлы Python.

Я сделал это через sudo:

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

Затем «brew install rdiff-backup» прошел без ошибок.

Наконец, я сделал «mv / usr / bin / python_orig / usr / bin / python», чтобы вернуть все обратно.

Ханс Волькенкратцер
источник
1

Вы, вероятно, на 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

Самое простое решение - перейти на www.python.org и установить Python 2.7.6, который совместим с LLVM 5.1.

Тогда подними тост за твою старую виртуальную среду rmvirtualenv {virtual_env_name}.

Затем создайте новую виртуальную среду.

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

Пип должен нормально работать после этого.

affablebloke
источник
Может быть, вы хотите извлечь требования из вашего старого env, прежде чем поджаривать его;) pip freeze>
needs.txt
1

Amazon Linux [AWS EC2]

Попытка pip install paramikoна Amazon Linux AMI release 2016.09дал мне ошибку, которая включала ссылку на этот пост. Так что, хотя это не соответствует названию ОП, я собираюсь поделиться ответом.

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

Золотой!

Бруно Броноски
источник
0

Я использовал пакет homebrew python. Хорошо работает после перекомпиляции.

Виталий Хамин
источник
0

Вариант исправления _sysconfigdata.py: использование виртуальной среды

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

Затем отредактируйте свою копию в $ {VIRTUAL_ENV} /lib/python2.7/_sysconfigdata.py

Я удалил все вхождения '-mno-fused-madd' и затем сборки работали в этом virtualenv.

Корень не нужен!

Больсон
источник
0

Для меня плохие флаги были явно указаны в Makefile пакета. Поэтому мне пришлось отредактировать make-файл, чтобы удалить нераспознанный флаг из пакета с ошибками.

Майк
источник
0

Обновление Homebrew и установка unixodbc решили это за меня

brew upgrade
brew install unixodbc
Випассана Виджаяранган
источник