从兄弟目录导入文件
Importing files from sibling directory
我需要 运行 对我的 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
的一般工作原理吗?我一直没弄明白。
要使 import 语句正常工作,必须以某种方式在 sys.path
中解析名称。创建正确的包结构并安装包通常是使名称在 sys.path
.
中可见的最佳方式
- 删除
root/__init__.py
和 tests/__init__.py
- 更正您的导入语句:
from ..server import create_app # no
from server import create_app # yes
- 添加
root/setup.py
内容如 setuptools basic guide.
- Create/activate virtualenv(通常在
root/.venv/
子目录中,但在哪里并不重要)
- 从项目根目录,即包含
setup.py
的目录,安装您的包:
pip install --editable .
我需要 运行 对我的 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
的一般工作原理吗?我一直没弄明白。
要使 import 语句正常工作,必须以某种方式在 sys.path
中解析名称。创建正确的包结构并安装包通常是使名称在 sys.path
.
- 删除
root/__init__.py
和tests/__init__.py
- 更正您的导入语句:
from ..server import create_app # no
from server import create_app # yes
- 添加
root/setup.py
内容如 setuptools basic guide. - Create/activate virtualenv(通常在
root/.venv/
子目录中,但在哪里并不重要) - 从项目根目录,即包含
setup.py
的目录,安装您的包:
pip install --editable .