1{ lib, fetchPypi, fetchpatch, python, buildPythonPackage
2, mpi, mpiCheckPhaseHook, openssh
3}:
4
5buildPythonPackage rec {
6 pname = "mpi4py";
7 version = "3.1.5";
8
9 src = fetchPypi {
10 inherit pname version;
11 hash = "sha256-pwbnbbklUTXC+10e9Uy097DkrZ4zy62n3idiYgXyoVM=";
12 };
13
14 passthru = {
15 inherit mpi;
16 };
17
18 postPatch = ''
19 substituteInPlace test/test_spawn.py --replace \
20 "unittest.skipMPI('openmpi(<3.0.0)')" \
21 "unittest.skipMPI('openmpi')"
22 '';
23
24 configurePhase = "";
25
26 installPhase = ''
27 mkdir -p "$out/lib/${python.libPrefix}/site-packages"
28 export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
29
30 ${python}/bin/${python.executable} setup.py install \
31 --install-lib=$out/lib/${python.libPrefix}/site-packages \
32 --prefix="$out"
33
34 # --install-lib:
35 # sometimes packages specify where files should be installed outside the usual
36 # python lib prefix, we override that back so all infrastructure (setup hooks)
37 # work as expected
38 '';
39
40 setupPyBuildFlags = ["--mpicc=${mpi}/bin/mpicc"];
41
42 nativeBuildInputs = [ mpi ];
43
44 __darwinAllowLocalNetworking = true;
45
46 nativeCheckInputs = [ openssh mpiCheckPhaseHook ];
47
48 meta = with lib; {
49 description = "Python bindings for the Message Passing Interface standard";
50 homepage = "https://github.com/mpi4py/mpi4py";
51 license = licenses.bsd2;
52 };
53}