我的项目结构如下所示:
repo/
|--model/api
|--function/function_app.py
|--function/tool.py
|--function/__init__.py
|--tests/test_function_app.py
|--tests/__init__.py
在 repo/ 中使用
func start
运行 function_app.py 需要我使用 from tool import someFunction
导入 tool.py。
但是,当我运行 pytest 时,我得到:
ModuleNotFoundError: No module named 'tool'
如果我将导入切换到
from function.tool import someFunction
,pytest 可以工作,但使用 func start
运行该函数会返回 ModuleNotFoundError: No module named 'function'
。
将测试文件放在与没有
__init__.py
的函数相同的目录中,使得函数和测试都可以工作。虽然我可以做到这一点,并在部署该功能时删除测试文件,但我觉得这真的很hacky。
我该如何解决这个问题?
谢谢。
使用 pytest 运行测试时,您似乎遇到了模块导入问题。要解决此问题,您可以确保项目结构的设置方式允许应用程序和测试无缝工作。
首先,确保“model”目录中有一个
__init__.py
文件以将其打包。该文件可以为空,但它向 Python 发出信号,表明该目录应被视为包。
repo/
|--model/
|--__init__.py
|--api/
|--function/
|--function_app.py
|--tool.py
|--__init__.py
|--tests/
|--test_function_app.py
|--__init__.py
现在,在测试文件中,您可以使用相对导入来导入包中的模块。例如,在“test_function_app.py”中:
from ..function.tool import someFunction
这样,您应该能够运行应用程序和测试,而不会遇到 ModuleNotFoundError。确保使用适当的路径设置运行 pytest,例如从“repo”目录运行。
如果问题仍然存在,您还可以检查 PYTHONPATH 以确保它包含项目的根目录。
我希望这有帮助!如果您还有任何其他问题或者还有什么我可以帮助您的,请告诉我。