#!/bin/sh -eux # set python version VERSION=${VERSION:-3.7} PYTHON=python$VERSION METHOD=${METHOD:-venv} TOX=${TOX:-true} # clean from possible older runs rm -rf venv .tox __pycache__ .pytest* test_*.py *.pyx *.c *.so || : # check the we can create the venv if [ "$METHOD" == "venv" ]; then $PYTHON -m venv venv elif [ "$METHOD" == "virtualenv" ]; then virtualenv --python=$PYTHON venv else echo 'Unsupported $METHOD' $METHOD >&2 exit 1 fi # and activate it # unset variables on 3.5, it's known set +u source venv/bin/activate set -u # run python in it python -c 'import sys; print(sys.version)' | head -n1 | grep $VERSION # install packages with pip python -m pip install pytest # run tests cat > test_foo.py << EOF def test_foo(): assert True EOF python -m pytest -v test_foo.py # check that we can do extension modules cat > module.pyx << EOF cdef int add(int a, int b): return a + b def two(): cdef int a = 1 cdef int b = 1 return add(a, b) EOF cat > setup.py << EOF from setuptools import setup from Cython.Build import cythonize setup(ext_modules = cythonize('module.pyx')) EOF python -m pip install Cython python setup.py build_ext --inplace python -c 'import module; print(module.two())' | grep '^2$' # deactivate has unset variable, it's known set +u deactivate set -u # use it with tox [[ "$TOX" != "true" ]] && exit 0 cat > tox.ini << EOF [tox] skipsdist = True [testenv] deps = pytest commands = python -m pytest -v test_foo.py EOF tox -e py${VERSION/./}