【发布时间】:2020-10-19 14:53:47
【问题描述】:
Good Day - 我在 google 和本网站上看到的类似 Python 3 导入问题和问题,但对这种情况没有答案。如何从应用程序外部导入 Flask-Classy 视图?
假设我有一个使用 Flask-Classy 在 Python 3.6 上的 Flask 应用程序,其结构类似于:
MainFolder
├── __init__.py
├── app
│ ├── __init__.py
│ ├── views
│ │ ├── __init__.py
│ │ └── myview.py
│ │ └── config.py
│ ├── app.py
└── sideproj
├── __init__.py
├── calc.py
现在myview.py 通过from .config import Config 导入配置(配置是config.py 中的类名)。 myview.py 包含在 Flask 框架中工作的主要 Class 函数,但在完成主要工作的类中还有一个 helper 函数。这一切都很好,当我运行 python app.py 时 - 它能够为 Flask 应用程序提供服务,我可以通过 localhost:5000 访问它。
现在我的问题是,我正在做一个计算一些数据的副项目,我想在 myview.py 但在烧瓶应用程序之外使用该核心主力函数。在sideproj/calc.py 中,我基本上想导入myview.py,这样我就可以运行函数(当前位于类中)而无需复制代码库。
我尝试的第一件事是使用丑陋的 hack:
import sys
sys.path.append('../app/views')
import myview
代码能够导入myview,但由于myview.py 正在导入config.py,它无法正确导入并给我错误ImportError: attempted relative import with no known parent package。
我找不到将myview 与config.py 一起导入的方法,并且仍然能够运行app.py 并为网站提供服务。例如,如果我将myview.py 中的导入更改为仅import config,则calc.py 可以运行,但app.py 由于无法导入Config 而失败。
有什么好办法吗?或者一种重新组织主要主力函数的方法,以便myview.py 和calc.py(以及config 中的函数引用值)都可以使用它。理想情况下,我在两个地方没有相同的代码。
【问题讨论】:
-
我将创建一个独立于您的烧瓶应用程序和
sideproject的新包,其中包含主力功能。例如,在运行烧瓶应用程序的环境中添加一个带有setup.py的setup.py文件夹,然后您可以根据需要在烧瓶应用程序和sideproject 代码中导入该功能,但只需维护workhorse_package中的功能。 -
你的
MainFolder/__init__.py是做什么的? -
没什么。它是空白的。它是在建议中添加的,以确保可以添加其他文件夹中的文件。
-
@ReilyBourne 请写下你是如何解决这个问题的,如果我的回答有帮助,你可以这样标记:)
标签: python flask python-import