在 Python3 中导入错误 运行 单元测试
Import error running unittest in Python3
我在 Python 3.6 中导入文件时遇到问题。我的目录树如下所示:
project/
app/
├── __init__.py
├── a.py
└── b.py
test/
├── __init__.py
├── test_a.py
└── test_b.py
在 b.py
:
中使用以下导入语句,我的应用程序运行正常(但是,测试没有运行)
from a import *
但是,在 b.py
:
from .a import *
所以,我选择from a import *
。像 python3 -m unittest
一样执行测试我总是得到以下错误:
E.
======================================================================
ERROR: tests.test_cell (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: tests.test_cell
Traceback (most recent call last):
File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 428, in _find_test_path
module = self._get_module_from_name(name)
File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 369, in _get_module_from_name
__import__(name)
File "/Users/serrodcal/Repositories/project/tests/test_b.py", line 2, in <module>
from app.b import *
File "/Users/serrodcal/Repositories/project/app/b.py", line 1, in <module>
from a import *
ModuleNotFoundError: No module named 'a'
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED (errors=1)
在这种情况下,我在 test_b.py
中的导入语句如下:
from unittest import TestCase
from app.cell import *
有什么办法可以解决这个问题吗?
我对 Python 中的导入以及 python 如何与模块一起工作感到困惑。
project/
module/
__init__.py
a.py
b.py
test/
test_a.py
test_b.py
main.py
这是我的新目录树。包含的文件是:
在main.py
中:
from module.b import Something
在b.py
中:
from .a import Something
在a.py
中:
from unittest import TestCase
from module.a import Something
在test_b.py
中:
from unittest import TestCase
from module.a import Something
from module.b import Something
像这样,很好用,应用和测试。
恕我直言,作为一种用户友好且直观的语言 Python,它的导入系统是我见过的最不友好的系统之一。
虽然丑陋,但我通常会做类似的事情 (python 3.6+):
try:
from a import class_defined_in_a_py
except (ModuleNotFoundError, ImportError):
from .a import class_defined_in_a_py
第一次导入适用于应用程序,第二次适用于测试。
我在 Python 3.6 中导入文件时遇到问题。我的目录树如下所示:
project/
app/
├── __init__.py
├── a.py
└── b.py
test/
├── __init__.py
├── test_a.py
└── test_b.py
在 b.py
:
from a import *
但是,在 b.py
:
from .a import *
所以,我选择from a import *
。像 python3 -m unittest
一样执行测试我总是得到以下错误:
E.
======================================================================
ERROR: tests.test_cell (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: tests.test_cell
Traceback (most recent call last):
File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 428, in _find_test_path
module = self._get_module_from_name(name)
File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 369, in _get_module_from_name
__import__(name)
File "/Users/serrodcal/Repositories/project/tests/test_b.py", line 2, in <module>
from app.b import *
File "/Users/serrodcal/Repositories/project/app/b.py", line 1, in <module>
from a import *
ModuleNotFoundError: No module named 'a'
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED (errors=1)
在这种情况下,我在 test_b.py
中的导入语句如下:
from unittest import TestCase
from app.cell import *
有什么办法可以解决这个问题吗?
我对 Python 中的导入以及 python 如何与模块一起工作感到困惑。
project/
module/
__init__.py
a.py
b.py
test/
test_a.py
test_b.py
main.py
这是我的新目录树。包含的文件是:
在main.py
中:
from module.b import Something
在b.py
中:
from .a import Something
在a.py
中:
from unittest import TestCase
from module.a import Something
在test_b.py
中:
from unittest import TestCase
from module.a import Something
from module.b import Something
像这样,很好用,应用和测试。
恕我直言,作为一种用户友好且直观的语言 Python,它的导入系统是我见过的最不友好的系统之一。
虽然丑陋,但我通常会做类似的事情 (python 3.6+):
try:
from a import class_defined_in_a_py
except (ModuleNotFoundError, ImportError):
from .a import class_defined_in_a_py
第一次导入适用于应用程序,第二次适用于测试。