在web2py中使用导入调用函数

1 投票
2 回答
3281 浏览
提问于 2025-04-16 20:42

我把代码分成了多个文件,然后把所有其他文件里的函数都导入到了admin.py里。假设我想调用一个叫XYZ的函数。如果我把函数的路径写成admin/XYZ,就会报错,说这个函数无效。为了能调用这个函数,我必须把路径写成file_with_XYZ_function/XYZ

有没有办法解决这个问题,让我能简单地从一个文件里调用所有导入的函数呢?

2 个回答

0

你可以在模块文件夹里创建 Python 文件,然后像在控制器中导入 Python 库一样导入它们。不过,你需要给这些文件指定路径,比如:

 from applications.myApp.modules.myModule import *

这是我为我的包装器提供的解决方案。现在你可以通过调用它们的名字来使用你的函数了。

myFunction
2

注意:这可能没有直接回答你的问题,因为我不太确定我理解你的问题……

不过,如果你想把一些代码放到一个(共享的)模块里,并在多个控制器中使用,我建议你看看web2py书的第四章(核心),并搜索一下local_import

在这种情况下,web2py提供了一种导入模块的方式,这种方式不会改变全局的sys.path:就是把模块放在应用的“modules”文件夹里。这样做的一个好处是,模块会自动和应用一起复制和分发;不过,有一些限制需要注意。web2py提供了一个local_import函数,必须用它来导入“modules”文件夹里的模块。

模块的导入取决于模块的位置以及web2py能否找到它们。如果是web2py能在sys.path或web2py/site-packages中找到的标准模块,使用import modulename应该能正常工作。

对于你应用内部的模块,web2py提供了另一种方式:applications/appname/modules

这些模块可以通过local_import来导入。

mymodule = local_import(themodule)

这行代码会在应用的本地模块文件夹中导入名为themodule的模块,并将其命名为mymodule。需要注意的是,local_import支持两个额外的参数:reload和app。在开发过程中,模块的代码经常会改变,所以不要忘记告诉web2py在每次请求时重新加载模块,使用参数reload=True,否则你不会看到你的更改,除非你重启web2py。

撰写回答