我对python nosetests有问题。当我尝试运行该命令时,我得到一个导入错误。我检查了模块是否正确安装在我的机器上。实际上,如果我从运行nosetests的目录运行解释器,我就能够导入模块。我检查了问题不仅在于导入该模块,还在于导入不同的模块。解决办法在哪里呢?
下面是我运行nosetests后可能的回溯:
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但是如果我打开python解释器,我就能够导入a_module。
下面是我的目录结构:
ROOT
└── package
├── __init__.py
├── package1
└── tests
├── tests1
│ └── package1 -> ../../package1
└── tests2发布于 2015-09-10 17:58:44
你的问题与鼻子本身无关。在查找模块和包时,除了Python解释器之外,nose不会执行任何额外的操作。
所以如果我们假设目录结构是这样的
ROOT
`-- package
|-- __init__.py
`-- tests
`-- __init__.py试着做python -c import package --什么时候有效,什么时候失败?
这很简单。除非您从ROOT内部调用该命令,否则它在任何地方都会失败。其他任何地方都不知道package。
原因是Python保留了一个路径列表(sys.path),用于标记包和模块的根。将采用语句import package,并在遍历sys.path中的所有条目时搜索package.py、其中包含__init__.py的package-dir或其他一些情况(C扩展、新样式名称空间包)
那么ROOT在这个路径列表中处于什么位置呢?很简单: Python解释器总是将当前工作目录添加到路径列表中。
总结一下:只需在ROOT中调用nose即可。
还有其他方法可以将路径添加到sys.path,例如使用virtualenvs。然后你可以从任何地方导入package,只要你使用venv解释器。
https://stackoverflow.com/questions/32487680
复制相似问题