猿问

从兄弟目录导入文件

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


我试过把__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通常是如何工作的吗?我一直无法弄清楚它们。


婷婷同学_
浏览 145回答 1
1回答

神不在的星期二

为了使导入语句正常工作,必须以sys.path某种方式解析名称。创建正确的包结构并安装包通常是让名称在sys.path.删除root/__init__.py和tests/__init__.py更正您的导入语句:from&nbsp;..server&nbsp;import&nbsp;create_app&nbsp;&nbsp;#&nbsp;nofrom&nbsp;server&nbsp;import&nbsp;create_app&nbsp;&nbsp;#&nbsp;yes添加root/setup.py内容,如setuptools basic guide 中所述。创建/激活 virtualenv(通常在root/.venv/子目录中,但在何处并不重要)从项目根目录,即包含 的目录setup.py,安装您的包:pip&nbsp;install&nbsp;--editable&nbsp;.
随时随地看视频慕课网APP

相关分类

Python
我要回答