Ошибка MPICC при установке mpi4py, несмотря на правильную и работающую установку MPICC

Я успешно установил MPICH на Ubuntu 12.04 и могу заставить простые тестовые программы C компилироваться и запускаться, как и ожидалось.

Теперь я пытаюсь использовать pip для установки mpi4py, просто через pip install mpi4py. Сначала я выполнил sudo apt-get build-dep python-mpi4py, который работал нормально.

Я работаю с virtualenv, поэтому эта установка mpi4py не с sudo (и не должна быть).

Вот команда и ошибка, которую я обнаружил после длинного набора вывода консоли, который выглядит как обычный материал компиляции (я могу распечатать все вывода консоли, если это необходимо, но я думаю, что большая часть из них является стандартным компилятором предупреждения, указывающие на отсутствие проблем).

(local-dev)espears@espears-w:~$ pip install mpi4py
src/ext/mpi_swig.c: In function ‘SWIG_Python_AddErrorMsg’:

src/ext/mpi_swig.c:859:5: error: format not a string literal and no format arguments [-Werror=format-security]

cc1: some warnings being treated as errors

error: command '/usr/bin/mpicc' failed with exit status 1

----------------------------------------
Cleaning up...
Command /home/espears/.virtualenvs/local-dev/bin/python -c "import setuptools, tokenize;__file__='/home/espears/.virtualenvs/local-dev/build/mpi4py/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-5o6OwN-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/espears/.virtualenvs/local-dev/include/site/python2.7 failed with error code 1 in /home/espears/.virtualenvs/local-dev/build/mpi4py
Traceback (most recent call last):
  File "/home/espears/.virtualenvs/local-dev/bin/pip", line 11, in <module>
    sys.exit(main())
  File "/home/espears/.virtualenvs/local-dev/local/lib/python2.7/site-packages/pip/__init__.py", line 185, in main
    return command.main(cmd_args)
  File "/home/espears/.virtualenvs/local-dev/local/lib/python2.7/site-packages/pip/basecommand.py", line 161, in main
    text = '\n'.join(complete_log)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 31: ordinal not in range(128)

Но which mpicc дает ожидаемый результат: /usr/bin/mpicc и, как упоминалось выше, если я использую этот mpicc для компиляции простых тестовых программ .c, они работают нормально.

Я видел несколько ссылок, описывающих параметр флага fPIC для компиляции MPI, но я просто использовал apt-get для установки MPI и, в частности, хочу полагаться только на собственные пакеты Ubuntu для этих инструментов, а не поддерживать отдельные инструкции по установке для ручной сборки. их.

Как определить, почему mpicc не работает в процессе установки mpi4py?

Добавлено

Следующее из вывода консоли, по-видимому, является командой компиляции, которая вызывает проблемы.

building 'mpi4py._mpi_swig' extension

/usr/bin/mpicc -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -fPIC -I/usr/include/python2.7 -c src/ext/mpi_swig.c -o build/temp.linux-x86_64-2.7/src/ext/mpi_swig.o

Это дает следующую ошибку, когда я сам пытаюсь из командной строки:

(local-dev)espears@espears-w:~$ /usr/bin/mpicc -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -fPIC -I/usr/include/python2.7 -c src/ext/mpi_swig.c -o build/temp.linux-x86_64-2.7/src/ext/mpi_swig.o
gcc: error: src/ext/mpi_swig.c: No such file or directory
gcc: fatal error: no input files
compilation terminated.

person ely    schedule 10.01.2014    source источник
comment
Эта ошибка является ошибкой компиляции, а не ошибкой компилятора.   -  person talonmies    schedule 10.01.2014
comment
Добавлено больше о конкретной команде компиляции, которая кажется проблемой. Я не могу найти ничего полезного о том, почему mpi_swig.c будет отсутствовать.   -  person ely    schedule 10.01.2014
comment
Процесс сборки, вероятно, выполняется в другом каталоге, чем тот, в котором вы выполняете команду компиляции. Вот почему относительный путь недействителен, и вы получаете ошибку «Нет такого файла». Другим вариантом может быть то, что файл mpi_swig.c автоматически создается SWIG, а затем удаляется.   -  person Hristo Iliev    schedule 10.01.2014
comment
Любой обходной путь для них или даже советы по диагностике, чтобы я мог проверить, происходит ли одно или другое. Я даже не уверен, какой простой каталог src/ здесь упоминается. Все элементы mpicc mpiexec и mpirun выглядят нормально, когда я их изучаю, и все построено для MPICH.   -  person ely    schedule 10.01.2014


Ответы (2)


Я смог успешно обойти это без каких-либо изменений в моей системе, просто указав pip на URL-адрес пакета MPI4PY, а не на имя пакета:

pip install https://bitbucket.org/mpi4py/mpi4py/downloads/mpi4py-1.3.1.tar.gz
person ely    schedule 10.01.2014
comment
Большое спасибо @Mr. Ф, ты спас мой день :) - person Humoyun Ahmad; 06.12.2016
comment
@ComputerScientist Можете ли вы опубликовать отдельный вопрос с вашей конкретной ошибкой и добавить сюда ссылку в комментарии? Я только что создал новую среду conda как для Python 2.7.11, так и для Python 3.6.2, и в обоих случаях одна и та же команда pip install из моего ответа работает без проблем. Это также работает, если указать URL более новой версии для mpi4py, например, для версии 3.0.0. Поскольку этот метод работает, нам нужно будет увидеть ваши конкретные сообщения об ошибках или проблемах, чтобы узнать, что отличается от вашей ситуации, что мешает ему работать для вас. - person ely; 19.06.2018
comment
Аналогичная проблема здесь: stackoverflow.com /вопросы/58355271/ - person rrz0; 12.10.2019

Похожая проблема возникла в Ubuntu 18.04 с openmpi-4.0.0. Решено установкой более старой версии openmpi-2.1.6.

apt-get install openmpi=2.1.6
person drew    schedule 08.02.2019