python测试的问题

python测试的问题,python,nosetests,Python,Nosetests,我在python测试方面有问题。 当我尝试运行该命令时,我得到一个导入错误。 我检查了模块是否正确安装在我的机器上。 事实上,如果我从运行测试的目录运行解释器, 我能够导入模块。 我检查了问题是否不仅要导入该模块,还要导入不同的模块。 解决办法在哪里 以下是我运行测试后可能的回溯: Traceback (most recent call last): File "/Library/Python/2.7/site-packages/nose/loader.py", line 418, in l

我在python测试方面有问题。 当我尝试运行该命令时,我得到一个导入错误。 我检查了模块是否正确安装在我的机器上。 事实上,如果我从运行测试的目录运行解释器, 我能够导入模块。 我检查了问题是否不仅要导入该模块,还要导入不同的模块。 解决办法在哪里

以下是我运行测试后可能的回溯:

Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/nose/loader.py", line 418, in loadTestsFromName
    addr.filename, addr.module)
  File "/Library/Python/2.7/site-packages/nose/importer.py", line 47, in importFromPath
    return self.importFromDir(dir_path, fqname)
  File "/Library/Python/2.7/site-packages/nose/importer.py", line 94, in importFromDir
    mod = load_module(part_fqname, fh, filename, desc)
  File "/Users/user-me/Desktop/bla/tests/blatest1", line 1, in <module>
    import a_module as mo
ImportError: No module named a_module

你的问题与鼻子本身无关。在查找模块和包时,nose不会执行Python解释器之外的任何魔法

所以如果我们假设一个目录结构像这样

 ROOT
 `-- package
     |-- __init__.py
     `-- tests
         `-- __init__.py
然后尝试执行
python-c导入包
——什么时候工作,什么时候失败

很简单。除了从
ROOT
中调用命令之外,它在任何地方都会失败。其他任何地方都不知道

原因是Python保留了一个路径列表(sys.path),这些路径标记包和模块的根。将获取一条语句
import-package
,并遍历
sys.path
中的所有条目,搜索
package.py
、一个
package
-dir,其中包含
\uuu init\uuuuuuuuuuuuuuupy
,或者其他一些情况(C扩展、新样式命名空间包)

那么
ROOT
从哪里进入路径列表呢?简单:Python解释器总是将当前工作目录添加到路径列表中

总而言之:只需从
根目录中调用nose即可


还有其他方法可以将路径添加到
sys.path
,例如使用virtualenvs。然后,如果您使用venv解释器,您可以从任何地方导入
程序包

请发布一个回溯,您的目录结构是什么样的,运行nose的目录是什么?package/包含init.py、modules/、tests/,我从主程序包目录运行。什么是“主程序包目录”?堆栈跟踪包含路径。你能告诉我们你是从哪个地方运行nose的吗?@deets:没关系,无论我在哪里运行nose测试,我都会得到导入错误。我的评论中的主程序包目录是“package/”,我在前面的评论中称之为“bla”。很抱歉,我不是那么专业,可能会造成混淆,但是如果我从桌面执行python-c“import a_module”命令,它会工作,而如果我从同一位置运行nosetests(它也会导入一个_模块),它就不会工作。按照您的建议,我尝试从根目录/以如下方式运行nosetests:nosetests/../package/,但我仍然遇到了_模块的导入问题。如果您位置正确,您应该像
nosets包/tests
那样运行它,而不是在目录结构中使用
s-这表示您在包中。很抱歉,现在我明白了根目录指的是我的包的上一级目录。我试过你说的话,但问题是一样的……我的确切结构如下:-根
--package |--uuu init_uuuuuuuy
--tests
--tests1
--tests2我可以从/tests运行,但我遇到了同样的问题。我还想说,我要导入的模块“a_module”不在包中,但它已正确安装。
 ROOT
 `-- package
     |-- __init__.py
     `-- tests
         `-- __init__.py