1

我有一个结构如下的项目:

|tools/
|-- test/
|   |-- __init__.py
|   |-- test_class1.py
|   |-- test_class2.py
|   
|-- tools/
|-- __init__.py
|   |-- class1.py
|   |-- class2.py
|   
|-- test_runner (Python script that calls unittest.TestLoader().discover('test'))
|-- README.md

我想运行test_runner并让它执行test文件夹中的所有测试。我的个人测试会有这样的一行:from test_class import TestClass测试适当的类。

test_runner看起来像这样:

#!/usr/bin/env python

import unittest
import sys
import os
sys.path.append(os.path.realpath(__file__) + '/tools') 

suite = unittest.TestLoader().discover('test')
results = unittest.TextTestRunner(verbosity=2).run(suite)
if len(results.errors) > 0 or len(results.failures) > 0:
    sys.exit(1)
sys.exit()

现在这不起作用,我的测试文件无法导入它们相应的类。如果我这样做,我可以让它工作,export PYTHONPATH=/path/to/file但我想通过脚本让它工作。

我也尝试过sys.path.insert(0, os.path.dirname(__file__) + '/tools'),但这不起作用,因为文件在我使用sys.path.insert.

4

1 回答 1

6

只需通过指定包名称(在您的情况下为“工具”)来确保使用绝对导入。您根本不必修改系统路径。

例如,使用此项目结构并运行 main.py:

project
    main.py
    package1
        __init__.py
        module1.py
    package2
        __init__.py
        module2.py

在 module1.py 中,您应该使用

from package2 import module2

或者

from package2.module2 import myclass

这是绝对进口。无需修改系统路径

于 2013-10-30T22:41:15.007 回答