繁体   English   中英

在 Python 上运行测试时出现导入错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM