Erreur MPICC lors de l'installation de mpi4py malgré une installation MPICC correcte et fonctionnelle
Question
J'ai installé avec succès MPICH sur Ubuntu 12.04 et je peux compiler et exécuter les programmes de test C simples comme prévu.
Maintenant, j'essaie d'utiliser pip pour installer mpi4py, simplement via pip install mpi4py
.J'ai d'abord exécuté sudo apt-get build-dep python-mpi4py
qui a bien fonctionné.
Je travaille avec virtualenv, donc cette installation mpi4py n'est pas avec sudo (et ne devrait pas l'être).
Voici la commande et l'erreur que j'ai rencontrée après une longue série de sorties de console qui ressemblent à des éléments de compilation normaux (je peux imprimer tous de la sortie de la console si nécessaire, mais je pense que la plupart sont des avertissements standard du compilateur qui n'indiquent aucun problème).
(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)
Mais, which mpicc
donne le résultat attendu : /usr/bin/mpicc
et comme mentionné ci-dessus, si j'utilise ceci mpicc
pour compiler des programmes de test .c simples, ils fonctionnent bien.
J'ai vu des liens décrivant une option de drapeau fPIC
pour compiler MPI, mais j'ai simplement utilisé apt-get pour installer MPI et je souhaite spécifiquement m'appuyer uniquement sur les packages Ubuntu natifs pour ces outils, au lieu de conserver des instructions d'installation distinctes pour les construire manuellement.
Comment puis-je déterminer pourquoi mpicc
échoue dans le mpi4py
processus d'installation?
Ajoutée
Ce qui suit dans la sortie de la console semble être la commande de compilation à l'origine du problème.
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
Cela donne l'erreur suivante lorsque j'essaie moi-même depuis la ligne de commande :
(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.
La solution
J'ai réussi à contourner ce problème sans aucune modification dans mon système en pointant simplement pip sur l'URL du package MPI4PY, plutôt que sur le nom du package :
pip install https://bitbucket.org/mpi4py/mpi4py/downloads/mpi4py-1.3.1.tar.gz
Autres conseils
Un problème similaire a été rencontré sur Ubuntu 18.04 avec openmpi-4.0.0.Résolu en installant l'ancienne version d'openmpi-2.1.6.
apt-get install openmpi=2.1.6