从同级目录导入文件

时间:2019-02-08 19:22:56

标签: python unit-testing import python-import flask-testing

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

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

文件夹结构

root/
----__init__.py
----server/
--------__init__.py
--------database.py
----tests/
--------__init__.py
--------config.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

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

1 个答案:

答案 0 :(得分: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. 添加root/setup.py,其中包含setuptools basic guide中所述的内容。
  2. 创建/激活virtualenv(通常在root/.venv/子目录中,但实际上并不重要)
  3. 从项目根目录(即包含setup.py的目录)中,安装软件包:
pip install --editable .