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
并导致版本冲突.