2017-05-13 5 views
0

すべての単体テストを別のディレクトリに入れたいと思います。私のプロジェクトのレイアウトは次のようになります。私は、私は次のエラーを取得するテストnostestを持つPython unittestインポートモジュール

$ cd project 
$ nosetest 
E 
====================================================================== 
ERROR: Failure: ImportError (cannot import name 'ScraperService') 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/usr/local/lib/python3.6/site-packages/nose/failure.py", line 39, in runTest 
    raise self.exc_val.with_traceback(self.tb) 
    File "/usr/local/lib/python3.6/site-packages/nose/loader.py", line 418, in loadTestsFromName 
    addr.filename, addr.module) 
    File "/usr/local/lib/python3.6/site-packages/nose/importer.py", line 47, in importFromPath 
    return self.importFromDir(dir_path, fqname) 
    File "/usr/local/lib/python3.6/site-packages/nose/importer.py", line 94, in importFromDir 
    mod = load_module(part_fqname, fh, filename, desc) 
    File "/usr/local/lib/python3.6/imp.py", line 234, in load_module 
    return load_source(name, filename, file) 
    File "/usr/local/lib/python3.6/imp.py", line 172, in load_source 
    module = _load(spec) 
    File "<frozen importlib._bootstrap>", line 675, in _load 
    File "<frozen importlib._bootstrap>", line 655, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 678, in exec_module 
    File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed 
    File "/usr/src/project/tests/package_test.py", line 2, in <module> 
    from package import Service 
ImportError: cannot import name 'Service' 

---------------------------------------------------------------------- 
Ran 1 test in 0.046s 

FAILED (errors=1) 

私はどのようにインポートするかを実行しようとすると

from unittest import TestCase 
from package import Service 

class ServiceTest(TestCase): 

    def test_build(): 
     service = Service.build() 
     self.assertIsNotNone(service) 

project 
    package 
     __init__.py 
     package.py 
    tests 
     __init__.py 
     package_test.py 

package_test.pyは次のようになりますテストクラスに私のパッケージ?

プロジェクトをモジュールにする必要はありますか?

setup.pyを配布用にパッケージ化する必要がありますか?あなたの問題を解決するために

+0

'from package.package import Service'へのインポートを変更すると違いがありますか? – grundic

+0

Whoa!します!しかし、なぜ? – Martinffx

+0

最初の 'package'はフォルダから、2番目はファイルから。すべてのサブディレクトリを含む、インポートされたモジュールへのフルパスを提供する必要があります。 – grundic

答えて

1

、あなたがモジュールディレクトリを含め、完全なパスとインポートを変更する必要があります。パッケージは方法です

from package.package import Service 

理由、これが動作するためには、どのようにPythonの負荷modulesです 「点線のモジュール名」を使ってPythonのモジュール名前空間を構造化するたとえば、モジュール名A.Bは、Aという名前のパッケージ内にBという名前のサブモジュール を指定します。パッケージをインポートするとき、 Pythonはsys.pathのディレクトリを検索し、 パッケージのサブディレクトリを探します。

したがって、プロジェクトにはpackageというフォルダがあり、それにはpackage.pyファイルが含まれています。したがって、Pythonがそれを見つけるためには、完全なパスを提供する必要があります。

関連する問題