gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:54:31 24 4
gpt4 key购买 nike

我有一个像这样构建的 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 *

现在我可以在本地运行测试,并且相同的代码在服务器上运行而不会失败。

谢谢!

最佳答案

使用绝对导入可以完全避免此类错误。 Pep8 :

Absolute imports are recommended, as they are usually more readable and tend to be better behaved (or at least give better error messages) if the import system is incorrectly configured (such as when a directory inside a package ends up on sys.path):

import mypkg.sibling
from mypkg import sibling
from mypkg.sibling import example

关于python - 在 Python 上运行测试时出现导入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59616017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com