Good Day -类似的Python 3导入问题和问题,我在google和这个网站上看到过,但对这种情况没有答案。如何从应用程序外部导入Flask类视图?
假设我有一个Flask应用,在Python 3.6上,使用Flask-Classy,其结构类似于:
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是config.py
中的类名)。Flask包含在myview.py
框架中工作的主要类函数,但在类中也有一个执行主要工作的helper
函数。这一切都很好,当我运行python app.py
时-它能够提供Flask应用程序,我可以通过localhost:5000
访问它。
现在我的问题是,我正在做一个计算一些数据的副项目,我想在myview.py
中使用核心的主力函数,但在flask应用程序之外。在sideproj/calc.py
中,我实际上是想导入myview.py
,这样我就可以运行函数(当前位于类中),而不需要复制代码库。
使用一个丑陋的黑客,我尝试的第一件事是:
import sys
sys.path.append('../app/views')
import myview
代码可以导入myview
,但因为myview.py
导入的是config.py
,所以无法正确导入,并给出了错误ImportError: attempted relative import with no known parent package
。
我找不到一种方法,既可以用config.py
导入myview
,又可以运行app.py
并为网站提供服务。例如,如果我将myview.py
中的导入更改为只导入import config
,那么calc.py
可以运行,但app.py
会失败,因为它无法导入Config
。
有什么好方法可以做到这一点吗?或者是一种重新组织主要工作函数的方法,以便myview.py
和calc.py
都可以使用它(并且函数引用config
中的值)。理想情况下,我不会在两个点上有相同的代码。
发布于 2020-10-19 15:55:33
中所建议的那样
我会创建一个新的包,独立于你的flask应用程序和包含主力功能的副项目。例如,添加包含随
pip install
一起安装的setup.py
的workhorse_package
文件夹。在环境中,您可以在中运行flask应用程序。然后,您可以根据需要在flask应用程序和副项目代码中导入该功能,但只保留workhorse_package
中的功能。@chris
myview.py
移动到MainFolder/helpers/
中,并编写一个脚本,在运行这两个项目时将其复制到这两个项目中。https://stackoverflow.com/questions/64429885
复制相似问题