如何在web2py中使用模块?

use*_*474 20 import module function web2py include

我有一些函数func.py,我想从我的web2py控制器访问调用default.py.我试图导入和使用func.pydefault.py与"进口FUNC"和"calculatesomething = func.calculatesomething",但它不工作.该文件func.py也添加在我的web2py程序的Modules部分中.

为什么不工作?我怎样才能让它发挥作用?如果该模块是func.pydefault/func.py或其他什么东西?

Ant*_*ony 35

只是为user570039的答案添加一点,这里记录 local_import .它包括一个reload参数.根据文件:

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

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


更新:事情发生了变化.local_import已被弃用.如果您有/applications/myapp/modules/mymodule.py,可以通过执行以下操作在myapp中导入它:

import mymodule
Run Code Online (Sandbox Code Playgroud)

在检查sys.path的其余部分之前,web2py将检查应用程序的"modules"文件夹.

有关详细信息,请参阅此处.


Mas*_*imo 27

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

如果您希望将模块打包到您的应用程序,然后将其放入applications/yourapp/modules,接下来,您应该将其导入func = local_import('func')

问:对web2py不熟悉的人可能会怀疑:为什么local_import()在前一种方法是Python世界中的标准方法时使用?

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

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