The main difference between pyMPI and MYMPI is that pyMPI is actually a special version of the Python interpreter along with a module. Our version, MYMPI, is a module only. MYMPI is used with a normal Python interpreter.
Those familiar with "normal" MPI know that the routine MPI_Init is used to initialize a MPI program. Every process in the parallel job calls MPI_Init. pyMPI departs from this standard operating procedure. pyMPI programs do not call MPI_Init. MPI_Init is built into the interpreter. That is, MPI_Init is called when the interpreter is launched. Calling MPI_Init is implicit. In MYMPI, programs explicitly call MPI_Init.
There is a fundamental difference in the semantics of the two packages. With pyMPI the interpreter is the parallel application. With MYMPI the code executed by the interpreter is the parallel application. One of the reasons why MYMPI was created was to provide better control of how and when MPI_Init is called.
MYMPI is much smaller since it is only a module not a full interpreter. It builds faster and in theory is easier to port to a new platform. It is also smaller because it only implements about 30 of the 120+ MPI calls.
The syntax of the calls in our package match the syntax of C and Fortran calls more closely than the syntax of pyMPI calls match C and Fortran. For example, with MYMPI arguments are explicit. With pyMPI arguments can be implicit in some instances. pyMPI has a more OOP flavor. We chose to match C and Fortran more closely because we intended from the start that we would be writing programs that mixed Python with the other languages.