Python Import语句.ModulenotFoundError:在运行测试和引用父文件夹中的模块时



问题:如何在测试文件中修复导入语句?

============================================================

我运行以下命令:

命令运行测试

cd cluster_health
python -m pytest tests/ -v -s

我然后得到以下错误!

    ImportError while importing test module '<full path>...cluster_healthtestsunittest_handler.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
testsunittest_handler.py:5: in <module>
    from health_check import app
health_checkapp.py:3: in <module>
    import my_elastic_search
E   ModuleNotFoundError: No module named 'my_elastic_search'

。 cluster_health tests uitt test_handler.py

import json
import sys
import pytest
import health_check
from health_check import app
from health_check import my_elastic_search
# from unittest.mock import patch
import mock
from mock import Mock
def test_lambda_handler(apigw_event, monkeypatch):
    CONN = Mock(return_value="banana")
    monkeypatch.setattr('health_check.my_elastic_search.connect', CONN)
    ret = app.lambda_handler(apigw_event, "")    
    # etc...

。 cluster_health health_check app.py

import json
import sys
import my_elastic_search
def lambda_handler(event, context):
    print(my_elastic_search.connect("myhost", "myuser", "mypass"))
    # etc

。 cluster_health health_check my_elastic_search.py

def connect(the_host, the_user, the_pass):
    return "You are connected!"

health_check是文件夹的名称。在Python中导入时,您不命名文件夹。您只需使用import my_elastic_search即可。但是,这可能会导致未找到模块。您可以使用称为"系统"的模块来定义程序应在何处搜索要导入的模块,也可以将代码与模块相同的目录中。从文件或从文件类导入特定函数时,您将使用from

多亏了来自父文件夹和@woofless(上(导入的模块,这是我对问题的解决方案(问题语句确实是我在父级目录中引用一个模块。脚手架。对于使用SAM的Visual Studio的AWS工具包,没有提供适当的代码来充分引用其他父模块(!

请注意下面的 sys.path.insert 。此外,根据@woofless,我简化了我的名称空间参考,以免引用根文件夹" health_check"。瞧!

。 cluster_health tests uitt test_handler.py

import sys, os, inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
parentdir = "%s\health_check"%os.path.dirname(parentdir)
sys.path.insert(0,parentdir)
print(parentdir)
import json
import pytest
import health_check
import app
import my_elastic_search

最新更新