jeudi 18 janvier 2018

Running pytest with cython - how to compile cython modules in pytest?

I have a project organized as follows:

project
├── project
│   ├── module1
│   │   ├── api.py
│   │   ├── _cpython_foo.py
│   │   └── _cython_foo.pyx
│   └── module2
├── setup.py
└── tests
    └── module1
        ├── test_cython_foo.py
        └── test_cpython_foo.py

where api.py imports cythonized extensions:

 """api.py""""
 from _cython_foo import cython_fun

My setup script builds the .pyx source inplace correctly and I'm able to use cython_fun in the installed package:

import project.module1.api as module1
module1.cython_fun()    # OK

However, pytest complains that it cannot import the cython module since the compiled binaries are not in place until I invoke setup.

project/module1/api.py:2: in <module>
    from _cython_foo import cython_fun
E   ImportError: No module named _cython_foo

It seems like bad style to leave a bunch of precompiled binaries inside my project directory that pytest depends on, so is there a conventional way to have pytest temporarily build the cython modules for the purpose of my unit tests only?

Aucun commentaire:

Enregistrer un commentaire