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

パッケージ名(この場合は「tools」)を指定して、絶対インポートを使用していることを確認してください。システム パスを変更する必要はまったくありません。

たとえば、このプロジェクト構造で 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 に答える