[英]ImportError while running tests on Python
我有一个像这样构建的 Python 项目:
├── process_folder
│ ├── tests
│ │ ├── __init__.py
│ │ ├── test_udf.py
│ │ └── test_process.py
│ ├── __init__.py
│ ├── process.py
│ └── udf.py
而 process.py 包含from udf import *
现在,当我运行 test_udf.py 时,它成功结束 - 但是当我运行 test_process.py 时,出现此错误:
============================= test session starts =============================
platform win32 -- Python 3.7.3, pytest-5.1.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\Dev\Spark\process_folder\tests
test_process.py:None (test_process.py)
ImportError while importing test module 'C:\Dev\Spark\process_folder\tests\test_process.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
test_process.py:5: in <module>
from ..process import *
..\process.py:9: in <module>
from udf import *
E ModuleNotFoundError: No module named 'udf'
collected 0 items / 1 errors
=================================== ERRORS ====================================
__________________ ERROR collecting test_process.py __________________
ImportError while importing test module 'C:\Dev\Spark\process_folder\tests\test_process.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
test_process.py:5: in <module>
from ..process import *
..\process.py:9: in <module>
from udf import *
E ModuleNotFoundError: No module named 'udf'
我无法理解它们之间的区别,以及为什么一个有效而另一个无效(我猜这与文件夹、位置以及我的导入来源有关),我尝试了所有找到的解决方案在线(例如删除__init__.py
文件),但没有成功运行测试。
编辑 - 对我有用的是绝对导入,process.py 现在包含:
sys.path.insert(0, "./")
from udf import *
现在我可以在本地运行测试,并且相同的代码在服务器上运行而不会失败。
谢谢!
您可以通过使用绝对导入来完全避免此类错误。 佩普8 :
建议使用绝对导入,因为如果导入系统配置不正确(例如当包内的目录最终位于 sys.path 上时),它们通常更具可读性并且往往表现更好(或至少给出更好的错误消息):
import mypkg.sibling from mypkg import sibling from mypkg.sibling import example
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.