Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Force py.test to use installed version of module

Tags:

pytest

I have a mixed Python/C++ library with test files mixed in amongst source files in the same directories. The layout looks like

/home/irving/geode
  geode
    __init__.py
    vector
      __init__.py
      test_vector.py
      ...
    ...

Unfortunately, the library is unusable in-place since it lacks .so extension modules. Question: Can I make py.test always use an installed version, even when run from /home/irving/geode or a subdirectory?

The test files have from __future__ import absolute_import, and run fine if executed directly as scripts. For example, if I do

cd geode/vector
./test_vector.py

which does import geode, it finds the installed version. However, if I run py.test in geode/vector, it finds the local copy of geode, and then dies.

like image 447
Geoffrey Irving Avatar asked Oct 23 '13 00:10

Geoffrey Irving


1 Answers

I think you have two options:

  1. run py.test --pyargs geode.vector.test_vector to make pytest interpretet the argument as an import path, deriving the file system path from it. This should run the test against the installed version.

  2. move the tests out into a tests directory without an __init__.py file. This way you need to pip install -e . to work in-place or can do python setup.py install and the py.test tests to run tests against the installed version.

like image 144
hpk42 Avatar answered Jan 03 '23 14:01

hpk42