6

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.

1 Answer 1

10

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Actually, without an __init__.py, setuptools cannot find test directory as a package, if you are using find_packages() in my experience. Therefore, tests directory will not be delivered on your site-packages. I choose to include a __init__.py and it works perfectly with py.test --pyargs mypackage.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.