如何从Flask路径内部导入包模块?

2024-05-15 11:14:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在迁移我编写的一个标准Python包格式的应用程序。由于我将应用程序的模块划分为多个目录,所以我通常通过将它们各自的路径插入到搜索路径,但这不再是一个选项,因为这些模块还从包中导入各自的依赖项。在

我试图从一个单独文件中的Flask中的路由(@app.route)中加载一组模块。在

@app.route("/interface")
def interface():
    moduleName = "Olympus.modules.%s.%s" % (category, module)
    print "Importing:", moduleName
    importedModule = __import__(moduleName)

(我删除了这个函数中多余的代码。)但是,这个函数只产生importer,告诉我“没有名为”的模块。每个(子)目录中都有__init__.py个文件,这些模块可以轻松地导入到其他地方。从包含目录的__init__.py导入模块会导致模块及其同级(例如同一个category中的所有脚本)可从脚本访问,但这需要在init文件中对所有模块进行硬编码。在

路由位于一个单独的文件中,如Flask(http://flask.pocoo.org/docs/patterns/packages/)建议的那样,该文件由应用程序的init文件导入。当__name__被打印时,它将产生正确的打包名称。这些模块也可以在文件顶部单独导入,不会产生不良影响。 按建议在函数内打印pkgutils.itermoduleshere将生成一个空列表。在

我做错什么了?如何将这些模块导入这个烧瓶路径?在

编辑:有问题的代码可以在这里找到:https://github.com/HAN-Olympus/Olympus/tree/master/webapp 编辑:这是目录结构,我对它进行了一些删减,但仍然相当广泛。在

^{pr2}$

Tags: 模块文件函数路径目录app应用程序flask
1条回答
网友
1楼 · 发布于 2024-05-15 11:14:13

将所有模块作为标准模块进行维护

保持简单,并安装模块以导入到烧瓶环境中。在

完成所有模块(包括。设置.py)在

要使模块可安装,它们必须包含setup.py安装脚本。检查文档,如何做到这一点。在

在烧瓶应用程序中安装模块

在Flask应用程序目录中,您可以通过以下方式安装其他模块:

$ pip install ../other_module_dir

并且重复这样做。在

在“编辑”模式下安装模块

如果您想让这些安装方式,即您使用最新版本,您可以使用“编辑”安装模式

^{2}$

使用这种方法,如果您修改了../other_module_dir项目中的代码,下次它将以更新版本导入。在

使用requirements.txt自动安装模块

要自动化安装,您可以最终将所有依赖项转储到名为requirements.txt的文件中(通常):

$ pip freeze > requiremetns.txt

编辑它(删除,不属于那里的,最后您可以一步安装所有相关模块:

$ pip install -r requirements.txt

结论

最苛刻的(但不是很难)是用setup.py完成模块。一旦您管理好了这一点(这项技能在以后会有很多回报),您的整个导入场景将变得微不足道,只需遵循您导入的模块的名称并使它们可用(我建议使用绝对导入)。在

注意:使用virtualenv进行这类工作,这不是必需的,但它会使您的工作更简单。在

相关问题 更多 >