使用 Azure Function 运行时和 pytest 'ModuleNotFoundError:没有名为...的模块'时出现导入问题

问题描述 投票:0回答:1

我的项目结构如下所示:

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。

我该如何解决这个问题?

谢谢。

python azure-functions pytest importerror
1个回答
0
投票

使用 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 以确保它包含项目的根目录。

我希望这有帮助!如果您还有任何其他问题或者还有什么我可以帮助您的,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.