11

我在环境中使用64Python 3.3.1位在Ubuntu 13.0464 位下运行的Eclipse 4.364 位。我的项目位于以下目录结构中。Pydev 2.7.6virtualenv

Dictionary
     |
     ----------------------------
     |                          |
     src                        test
       |                          |
       petaapan                   petaapan
          |   |                   |      |
__init__.py logging        __init__.py  logging
            |     |                     |     |
   __init__.py    mplogging.py  __init__.py  test_mplogging.py

当我尝试test_mplogging.py使用pytest作为测试运行器运行时,我得到以下结果:

pydev debugger: starting
============================= test session starts ==============================
platform linux -- Python 3.3.1 -- pytest-2.3.5
plugins: pep8, cache
collected 0 items / 1 errors

==================================== ERRORS ====================================
______________________ ERROR collecting test_mplogging.py ______________________
File "/home/jonathan/UC/Git Repositories/isiiwesuu/Dictionary/tests/petaapan/logging/test_mplogging.py", line 11
in <module>
>   import petaapan.logging.mplogging as ml
E   ImportError: No module named 'petaapan.logging.mplogging'

sys.path已经Dictionary/test提前了,Dictionary/src所以首先搜索测试树,看起来这就是常规包导入失败的原因。

我的下一次尝试是使用命名空间包做同样的事情,所以我删除了所有__init__.py文件并得到以下结果:

pydev debugger: starting
============================= test session starts ==============================
platform linux -- Python 3.3.1 -- pytest-2.3.5
plugins: pep8, cache
collected 0 items / 1 errors

==================================== ERRORS ====================================
______________________ ERROR collecting test_mplogging.py ______________________
File "/home/jonathan/UC/Git Repositories/isiiwesuu/Dictionary/tests/petaapan/logging/test_mplogging.py", line 11
in <module>
>   import petaapan.logging.mplogging as ml
File "/home/jonathan/UC/Git Repositories/isiiwesuu/Dictionary/tests/petaapan/logging/<frozen importlib._bootstrap>", line 1564
in _find_and_load
>   ???
File "/home/jonathan/UC/Git Repositories/isiiwesuu/Dictionary/tests/petaapan/logging/<frozen importlib._bootstrap>", line 1522
in _find_and_load_unlocked
>   ???
File "/home/jonathan/UC/Git Repositories/isiiwesuu/Dictionary/tests/petaapan/logging/<frozen importlib._bootstrap>", line 1476
in _find_module
>   ???
File "/home/jonathan/isiiwesuu/lib/python3.3/site-packages/_pytest/assertion/rewrite.py", line 68
in find_module
>               fd, fn, desc = imp.find_module(lastname, path)
File "/home/jonathan/isiiwesuu/lib/python3.3/imp.py", line 197
in find_module
>                              "not {}".format(type(name)))
E           RuntimeError: 'list' must be None or a list, not <class 'str'>
=========================== 1 error in 0.49 seconds ============================

以下是test_mplogging.py相关部分:

import logging
from os import getcwd

from multiprocessing import Queue, Process
import petaapan.logging.mplogging as ml

谁能建议我在这种情况下需要做什么?

4

1 回答 1

1

正如我所看到的,你有petaapan.logging.mploggingunder Dictionary/src,但没有 under Dictionary/test

petaapan我相信解释器会从import指令中解析并找到它Dictionary/test,然后建议它是您引用的模块。但之后它无法找到(mploggingDictionary/test/petaapan/logging检测到的模块范围内),因此引发异常。

于 2013-09-03T18:31:17.800 回答