我使用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
我是否将文件添加到包中?或者可能将文件复制到测试环境?我实际上不知道如何继续。任何帮助将不胜感激。
答案 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
不用担心此配置的简短性-更少的代码也更少的维护。