PYTHON: nosetests导入文件路径有多个modules/files

PYTHON: nosetests import file path with multiple modules/files

我目前正在研究 LearnPythonTheHardWay and have reached Exercise 48,其中详细介绍了 Nosetests。只要所有代码都在一个 python.py 文件中,我就可以执行单元测试。但是,如果我将其他文件作为程序的一部分包含在内,即使用 import 然后尝试 nosetest 这样的项目,我会收到错误消息,因为如下:

======================================================================

ERROR: Failure: ImportError (No module named 'temp')

Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/nose/failure.py", line 39, in runTest
raise self.exc_val.with_traceback(self.tb)
File "/usr/local/lib/python3.4/dist-packages/nose/loader.py", line 414, in loadTestsFromName ## ##
addr.filename, addr.module)
File "/usr/local/lib/python3.4/dist-packages/nose/importer.py", line 47, in importFromPath
return self.importFromDir(dir_path, fqname)
File "/usr/local/lib/python3.4/dist-packages/nose/importer.py", line 94, in importFromDir
mod = load_module(part_fqname, fh, filename, desc)
File "/usr/lib/python3.4/imp.py", line 235, in load_module
return load_source(name, filename, file)
File "/usr/lib/python3.4/imp.py", line 171, in load_source
module = methods.load()
File "", line 1220, in load
File "", line 1200, in _load_unlocked
File "", line 1129, in _exec
File "", line 1471, in exec_module
File "", line 321, in _call_with_frames_removed
File "/home/user/LEARNPYTHONTHEHARDWAY/ex48/tests/scanner_tests.py", line 6, in
from ex48.scanner import lexicon
File "/home/user/LEARNPYTHONTHEHARDWAY/ex48/ex48/scanner.py", line 6, in
import temp
ImportError: No module named 'temp'


Ran 1 test in 0.028s

FAILED (errors=1)

我的项目目录结构如下:

ex48/
  ex48/
     scanner.py
     temp.py
  __pycache__/
  tests/
     __init__.py
    scanner_tests.py

我的目录截图::

文件本身的屏幕截图::

我的scanner_tests.py文件如下:

from nose.tools import *
from ex48.scanner import lexicon
from ex48 import temp

def test_directions():
    assert_equal(lexicon.scan("north"),[('direction','north')])
        result = lexicon.scan("north south east")
        assert_equal(result, [('direction', 'north'),
                          ('direction', 'south'),
                          ('direction', 'east')])

我的scanner.py文件如下:

   import temp

   class lexicon:
       def scan(val):
          if(val == "north"):
              return [('direction', 'north')]
          else:
              return [('direction', 'north'),
                      ('direction', 'south'),
                      ('direction', 'east')]

    runner = temp.temp("hello")

最后我的temp.py文件如下:

   class temp(object):
       def __init__(self,name):
           self.name = name
       def run(self):
           print "Your name is; %s" % self.name     
    runner.run()

我的问题是如何克服 ImportError: No Module named 'temp' 因为我好像导入了 temp.py 文件在 scanner.py 文件和 scanner_tests.py 文件中,但当 [=107] 时 nose 似乎无法导入它=]秒。 Nosetests 在只有单个 scanner.py 文件时工作正常,但在导入时却不行。是否有用于导入 nose 单元测试的特殊语法?该脚本在 运行 时也能正常工作并在命令行正确导入。

*注意:我运行正在python关闭在线服务器的有限帐户,因此某些管理员权限不可用。

**注意下面是完全不同的另一个项目的屏幕截图,错误完全相同:

目录布局:

Game.py:

Otherpy.py - 导入的文件:

Nose测试脚本文件:

最后是 nosetests 导入错误:

一切都需要与您的执行点相关。您是 运行 来自 ex48 根目录的 nose 命令,因此您的所有导入都需要与该位置相关。

因此,在 game.py 中,您应该根据 ex48 进行导入。因此:

from ex48.otherpy import House

相同的逻辑应该应用于引用 temp 文件夹的示例。

from ex48.temp import temp

我找到的唯一解决方案是 post 将以下内容添加到主文件的顶部:

try: 
     # This handles imports when running .py files from inside app directory
     from file_to_import.py import class_instance
except:
     # This handles imports when running nosetests from top-level (above app) 
     # directory
     from directory_containing_app_files.file_to_import import class_instance

我对替代解决方案非常感兴趣。