测试脚本run_test.py在conff build of pyfftw中失败

时间:2014-06-03 21:20:04

标签: conda

我使用conda build来成功构建fftw和pyfftw的包。我现在正在尝试编写一个run_test.py例程来执行pyfftw中的测试,作为构建过程的一部分。我写了一个run_test.py来运行pyfftw中的一个测试文件:

import os
path=os.environ.get('SRC_DIR')
execfile(path+'/test/test_pyfftw_real_backward.py')

在构建结束时,我收到以下错误:

Traceback (most recent call last):
  File "/data/miniconda/conda-bld/test-tmp_dir/run_test.py", line 38, in <module>
    execfile(path+'/test/test_pyfftw_real_backward.py')
  File "/data/miniconda/conda-bld/work/pyFFTW-0.9.2/test/test_pyfftw_real_backward.py", line 24, in <module>
    from .test_pyfftw_base import run_test_suites
ValueError: Attempted relative import in non-package
TESTS FAILED: pyfftw-0.9.2-np18py27_0

我是否将文件添加到包中?或者可能将文件复制到测试环境?我实际上不知道如何继续。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这里有几件事(这个问题是很久以前问的。)

以上问题是您无法通过from .something import ...进行相对导入-不是因为文件不存在,而是因为您将其作为文件运行,类似于:

python test/my_test.py

如果您执行以下操作,它将起作用:

python -m test.my_test

但是execfile不是那样的,而且-它已经过去了:What is an alternative to execfile in Python 3?

接下来的事情,对于不小心来到这里的人们-您不应该这样使用SRC_DIR,否则您将得到:

ValueError: In conda-build 2.1+, the work dir is removed by default before 
the test scripts run.  You are using the SRC_DIR variable in your test script,
but these files have been deleted.  Please see the  documentation regarding
the test/source_files meta.yaml section, or pass the --no-remove-work-dir flag.

拥有一个正确的方式 有关为conda软件包配置测试的更多信息,请参见此处:https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html#test-section

因此,您应该使您的测试自成一体,或者至少它们应该做类似的事情:

import os
import sys

sys.path.append(os.path.dirname(__file__))
import test_common
# etc.

要在源代码中建立test/子目录的有效设置,只需使用:

test:
  requires:
   - nose
  source_files:
   - test/*.py
  commands:
   - nosetests

不用担心此配置的简短性-更少的代码也更少的维护。