1

我需要为我的 Flask 应用程序运行单元测试。在我的测试配置文件中,我需要create_app从同级目录导入烧瓶函数来初始化测试应用程序。如果没有导入错误,我无法弄清楚。

我尝试过放置__init__.py几乎每个文件夹都没有成功。我读过不建议编辑 sys 路径,所以我想要一个没有的解决方案。

文件夹结构

root/
----__init__.py
----server/
--------__init__.py
--------database.py
----tests/
--------__init__.py
--------config.py

配置文件

from server import create_app
from server.database import db

引发此错误:

Traceback (most recent call last):
  File "tests/config.py", line 2, in <module>
    from server import create_app
ModuleNotFoundError: No module named 'server'

和:

from ..server import create_app
from ..server.database import db

引发此错误:

Traceback (most recent call last):
  File "tests/config.py", line 2, in <module>
    from ..server import create_app
ValueError: attempted relative import beyond top-level package

有人可以解释为什么它不起作用以及 pythonimport的一般工作原理吗?我一直无法弄清楚它们。

4

1 回答 1

0

要使导入语句正常工作,必须以sys.path某种方式解析名称。创建正确的包结构并安装包通常是使名称在sys.path.

  1. 删除root/__init__.pytests/__init__.py
  2. 更正您的导入语句:
from ..server import create_app  # no
from server import create_app  # yes
  1. 按照setuptools 基本指南中的说明添加root/setup.py内容。
  2. 创建/激活 virtualenv(通常在子目录中root/.venv/,但在哪里并不重要)
  3. 从项目根目录,即包含 的目录setup.py,安装你的包:
pip install --editable .
于 2019-02-08T19:28:47.870 回答