强制py.test使用已安装的模块版本

Geo*_*ing 4 pytest

我有一个混合的Python/C++库,测试文件混合在同一目录的源文件中.布局看起来像

/home/irving/geode
  geode
    __init__.py
    vector
      __init__.py
      test_vector.py
      ...
    ...
Run Code Online (Sandbox Code Playgroud)

遗憾的是,由于缺少.so扩展模块,因此库无法就地使用. 问题:我是否可以使py.test始终使用已安装的版本,即使从/home/irving/geode或从子目录运行?

测试文件具有from __future__ import absolute_import,并且如果直接作为脚本执行则运行正常.例如,如果我这样做

cd geode/vector
./test_vector.py
Run Code Online (Sandbox Code Playgroud)

它确实import geode找到了已安装的版本.但是,如果我运行py.test geode/vector,它会找到本地副本geode,然后死掉.

hpk*_*k42 8

我想你有两个选择:

  1. 运行py.test --pyargs geode.vector.test_vector以使pytest将参数解释为导入路径,从中导出文件系统路径.这应该针对已安装的版本运行测试.

  2. 将测试移到tests没有__init__.py文件的目录中.这样,您需要pip install -e .就地工作或可以执行python setup.py install以及py.test tests针对已安装的版本运行测试.