如何在 web2py 中使用模块?

Posted

技术标签:

【中文标题】如何在 web2py 中使用模块?【英文标题】:How can I use modules in web2py? 【发布时间】:2011-06-07 03:32:56 【问题描述】:

我在func.py 中有一些函数,我想从名为default.py 的web2py 控制器访问这些函数。我尝试通过“import func”和“calculatesomething = func.calculatesomething”在default.py 中导入和使用func.py,但它不起作用。文件func.py 也被添加到我的 web2py 程序的 Modules 部分。

为什么它不起作用?我怎样才能让它工作?模块应该在func.pydefault/func.py 还是别的什么?

【问题讨论】:

【参考方案1】:

只是在 user570039 的回答中添加一点,local_import 记录在 here。它包括一个reload 参数。根据文档:

当你指定reload=True时,它会在每次请求时重新导入模块;否则你的 python 进程只会导入一次模块。默认为reload=False

在开发中,设置reload=True 会很方便,因为对模块的更改将立即生效,无需重新启动。但是,每次请求都重新导入会降低性能,因此建议在生产环境中使用 reload=False


更新:情况发生了变化。 local_import 已被弃用。如果你有 /applications/myapp/modules/mymodule.py,你可以在 myapp 中导入它:

import mymodule

web2py 将在检查 sys.path 的其余部分之前检查应用程序的“模块”文件夹。

更多详情请见here。

【讨论】:

谢谢你们!这两个答案都非常有帮助! 如何对文件夹执行此操作?例如,当我尝试从/applications/myapp/modules/fuzzywuzzy/ 目录中的/applications/myapp/modules/fuzzywuzzy/ 库中导入名为fuzzprocess 的模块时,在带有Py2.7 的GAE 上使用from fuzzywuzzy import fuzz, process,我得到一个ImportError<type 'exceptions.ImportError'> No module named fuzzywuzzy 我把它放在web2py/site-packages/fuzzywuzzy 中,现在可以导入它们了:) ...但我仍然对将模块放在web2py/applications/myapp/modules/ 目录中的可能性感兴趣,特别是因为我没有当我为较新的应用程序“更新”我的模块时,我不想意外地破坏我的旧应用程序。 web2py 如果你把它放在 modules 文件夹和 from applications.myapp.modules.fuzzywuzzy import fuzz, process 也应该可以工作 由于原始答案提到了reload=True,我认为要获得完整的答案,更新应该包括提及from gluon.custom_import import track_changes; track_changes(True) 作为reload=True 功能的替代品【参考方案2】:

func 必须位于PYTHONPATH (sys.path) 中的某个位置,例如web2py/site-packages。这是正确的 Pythonic 方式。

如果您想将您的模块与您的应用打包,则将其放入applications/yourapp/modules,接下来,您应使用func = local_import('func') 导入它

问:不熟悉 web2py 的人可能会想:既然前一种方法是 Python 世界的标准方法,为什么还要使用 local_import()

答:因为在 web2py 中,您无需重新启动服务器即可安装新应用。应用程序无法更改sys.path,因为它不是线程安全的,并且取决于这些应用程序的安装顺序。此外,两个应用程序可能需要具有相同名称但不同的模块(例如不同的版本)。我们希望避免这些模块与可能预安装的其他模块发生冲突。

local_import() 是一种解决方法,它允许您将一些模块与您的应用一起发布并导入它们,而无需将文件夹添加到 sys.path 并导致版本冲突。

【讨论】:

以上是关于如何在 web2py 中使用模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Web2py 中使用 jquery 将数据从视图传输到控制器操作函数

web2py 如何注销用户

如何在 PythonAnywhere 上部署 web2py?

Web2py 数据库:如何从选定的行中选择行的子集?以及如何将它传递给 JavaScript?

你如何阅读的web2py的探查产生的.prof文件?

在 web2py DAL 中查询空值