首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在项目外部导入flask类视图

在项目外部导入flask类视图
EN

Stack Overflow用户
提问于 2020-10-19 22:53:48
回答 1查看 38关注 0票数 0

Good Day -类似的Python 3导入问题和问题,我在google和这个网站上看到过,但对这种情况没有答案。如何从应用程序外部导入Flask类视图?

假设我有一个Flask应用,在Python 3.6上,使用Flask-Classy,其结构类似于:

代码语言:javascript
代码运行次数:0
运行
复制
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,这样我就可以运行函数(当前位于类中),而不需要复制代码库。

使用一个丑陋的黑客,我尝试的第一件事是:

代码语言:javascript
代码运行次数:0
运行
复制
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.pycalc.py都可以使用它(并且函数引用config中的值)。理想情况下,我不会在两个点上有相同的代码。

EN

回答 1

Stack Overflow用户

发布于 2020-10-19 23:55:33

  1. 您可以将您想要复制到包中的功能设置为,正如@chris在评论:

中所建议的那样

我会创建一个新的包,独立于你的flask应用程序和包含主力功能的副项目。例如,添加包含随pip install一起安装的setup.pyworkhorse_package文件夹。在环境中,您可以在中运行flask应用程序。然后,您可以根据需要在flask应用程序和副项目代码中导入该功能,但只保留workhorse_package中的功能。@chris

  1. 你可以使用Flask 。这是否适用取决于您的应用程序使用情况。

  1. (Hacky方式,不推荐用于严肃的应用程序,但在开发多个原型时很有用,使用一些共享功能)您可以将myview.py移动到MainFolder/helpers/中,并编写一个脚本,在运行这两个项目时将其复制到这两个项目中。

  1. 不要这样做。如果你想保持干燥,你就不需要。这是两个独立的项目,它们需要单独的文件。即使是现在,它们也是不同的--一个使用一些配置,另一个则不使用。这真的有那么大帮助吗?
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64429885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档