我正在迁移我编写的一个标准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.itermodules
,here将生成一个空列表。在
我做错什么了?如何将这些模块导入这个烧瓶路径?在
编辑:有问题的代码可以在这里找到:https://github.com/HAN-Olympus/Olympus/tree/master/webapp 编辑:这是目录结构,我对它进行了一些删减,但仍然相当广泛。在
^{pr2}$
将所有模块作为标准模块进行维护
保持简单,并安装模块以导入到烧瓶环境中。在
完成所有模块(包括。设置.py)在
要使模块可安装,它们必须包含
setup.py
安装脚本。检查文档,如何做到这一点。在在烧瓶应用程序中安装模块
在Flask应用程序目录中,您可以通过以下方式安装其他模块:
并且重复这样做。在
在“编辑”模式下安装模块
如果您想让这些安装方式,即您使用最新版本,您可以使用“编辑”安装模式
^{2}$使用这种方法,如果您修改了
../other_module_dir
项目中的代码,下次它将以更新版本导入。在使用
requirements.txt
自动安装模块要自动化安装,您可以最终将所有依赖项转储到名为
requirements.txt
的文件中(通常):编辑它(删除,不属于那里的,最后您可以一步安装所有相关模块:
结论
最苛刻的(但不是很难)是用
setup.py
完成模块。一旦您管理好了这一点(这项技能在以后会有很多回报),您的整个导入场景将变得微不足道,只需遵循您导入的模块的名称并使它们可用(我建议使用绝对导入)。在注意:使用virtualenv进行这类工作,这不是必需的,但它会使您的工作更简单。在
相关问题 更多 >
编程相关推荐