Python 3.x 如何构造Python3项目以运行web服务和测试套件(导入问题)

Python 3.x 如何构造Python3项目以运行web服务和测试套件(导入问题),python-3.x,pytest,python-import,pythonpath,fastapi,Python 3.x,Pytest,Python Import,Pythonpath,Fastapi,我有一个围绕FastAPI构建的简单Python web服务,如下所示 project/ app/ __init__.py main.py config.py tests/ run_tests.py main.py需要从config.py导入一些项目,如下所示 project/ app/ __init__.py main.py config.py tests/ run_tests.py 从app.

我有一个围绕FastAPI构建的简单Python web服务,如下所示

project/
  app/
    __init__.py
    main.py
    config.py
    tests/
      run_tests.py
main.py
需要从
config.py
导入一些项目,如下所示

project/
  app/
    __init__.py
    main.py
    config.py
    tests/
      run_tests.py
从app.config导入设置
app=FastAPI()
我需要像这样运行它来运行Web服务

 $ cd project/app
 $ python main.py
 $ # Or I can do this
 $ uvicorn main:app --reload
run_tests.py
有此代码

从app.main导入app
从app.config导入设置
我像这样运行测试

project/
  app/
    __init__.py
    main.py
    config.py
    tests/
      run_tests.py
$cd项目/应用程序/测试
$pytest

然而,这不起作用。我只能让测试工作或者让Web服务器工作

  • 如果我将代码保持在上面的状态,那么单元测试可以正常运行,但我无法运行Web服务
  • $cd项目/应用程序
    $python main.py
    回溯(最近一次呼叫最后一次):
    文件“main.py”,第19行,在
    从app.config导入设置
    ModuleNotFoundError:没有名为“app”的模块
    $cd..//项目
    $#我现在只在“/project”中,而不是在“project/app”中
    $python应用程序/main.py
    回溯(最近一次呼叫最后一次):
    文件“app/main.py”,第19行,在
    从app.config导入设置
    ModuleNotFoundError:没有名为“app”的模块
    
    如果我尝试将其更改为相对导入

    main.py

    from.config导入设置
    
    我得到这个错误

    $cd项目/应用程序
    $python main.py
    回溯(最近一次呼叫最后一次):
    文件“main.py”,第19行,在
    从.config导入设置
    ModuleNotFoundError:没有名为“\uuuu main\uuuu.config”的模块__main__;不是一个包
    
    只有当我按如下方式更改它时,它才起作用

    main.py

    来自配置导入设置
    
    $cd项目/应用程序
    $python main.py
    $python main.py
    信息:已启动服务器进程[8325]
    信息:uvicorn。错误:已启动服务器进程[8325]
    信息:正在等待应用程序启动。
    
    但是-这会中断单元测试的运行

    main.py

    来自配置导入设置
    
    $cd项目/应用程序/测试
    $pytest
    测试api.py:7:in
    从app.main导入应用程序
    ../main.py:19:in
    从配置导入设置
    E ModuleNotFoundError:没有名为'config'的模块
    


    我不明白发生了什么事?我的
    project/app
    文件夹中有一个
    \uuuu init\uuuuuuuuuuuuuuuupy
    ,为什么不将其视为一个包?

    查看此问题,可能会有帮助:查看此问题,可能会有帮助: