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
我对替代解决方案非常感兴趣。
我目前正在研究 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
我的目录截图::
文件本身的屏幕截图::
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
我对替代解决方案非常感兴趣。