我已经在Ubuntu12.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测试程序,它们工作正常。

我见过一些描述标志选项的链接 fPIC 对于编译MPI,但是,我只是使用apt-get来安装MPI,并且特别希望只依赖于这些工具的本机Ubuntu软件包,而不是维护手动构建它们的单独安装说明。

我怎样才能确定为什么 mpiccmpi4py 安装过程?

补充道

控制台输出中的以下内容似乎是导致麻烦的编译命令。

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.
有帮助吗?

解决方案

我能够成功地解决这个问题,只需将pip指向MPI4PY包url,而不是包名称,就不会对系统中的任何内容进行任何更改:

pip install https://bitbucket.org/mpi4py/mpi4py/downloads/mpi4py-1.3.1.tar.gz

其他提示

在带有openmpi-4.0.0的Ubuntu18.04上遇到了类似的问题。通过安装旧版本的openmpi-2.1.6解决。

apt-get install openmpi=2.1.6
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top