我已经成功地在Ubuntu 12.04安装MPICH,可以得到简单的测试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测试程序,他们工作得很好。
我见过的描述编译MPI标志选项fPIC
一些链接,但是,我只是用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.
我可以简单地通过在MPI4PY包URL指向点子,而不是包名成功地解决这个在不改变在我的系统什么:
pip install https://bitbucket.org/mpi4py/mpi4py/downloads/mpi4py-1.3.1.tar.gz
遇到在Ubuntu 18.04类似的问题了openmpi-4.0.0。通过安装了openmpi-2.1.6的旧版本解决。
apt-get install openmpi=2.1.6