Ser*_*lvo 5 python python-3.x python-unittest
我在 Python 3.6 中导入文件时遇到问题。我的目录树如下所示:
project/
app/
??? __init__.py
??? a.py
??? b.py
test/
??? __init__.py
??? test_a.py
??? test_b.py
Run Code Online (Sandbox Code Playgroud)
它使用以下导入语句在我的应用程序中工作(但是,没有工作测试)b.py:
from a import *
Run Code Online (Sandbox Code Playgroud)
但是,它在我的应用程序中不起作用(但是,可以进行测试)在b.py以下内容中使用另一个:
from .a import *
Run Code Online (Sandbox Code Playgroud)
所以,我选择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)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我的导入语句test_b.py如下所示:
from unittest import TestCase
from app.cell import *
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题?
我对 Python 中的导入以及 python 如何使用模块感到困惑。
project/
module/
__init__.py
a.py
b.py
test/
test_a.py
test_b.py
main.py
Run Code Online (Sandbox Code Playgroud)
这是我的新目录树。文件的包含内容是:
在main.py:
from module.b import Something
Run Code Online (Sandbox Code Playgroud)
在b.py:
from .a import Something
Run Code Online (Sandbox Code Playgroud)
在a.py:
from unittest import TestCase
from module.a import Something
Run Code Online (Sandbox Code Playgroud)
在test_b.py:
from unittest import TestCase
from module.a import Something
from module.b import Something
Run Code Online (Sandbox Code Playgroud)
像这样,它运行良好,应用和测试。
| 归档时间: |
|
| 查看次数: |
9859 次 |
| 最近记录: |