Python 在web2py中使用import调用函数
我已将代码拆分为多个文件。我已将所有其他文件中的所有函数导入admin.py。假设我想调用一个函数XYZ。如果我将函数的路径设置为Python 在web2py中使用import调用函数,python,function,import,call,web2py,Python,Function,Import,Call,Web2py,我已将代码拆分为多个文件。我已将所有其他文件中的所有函数导入admin.py。假设我想调用一个函数XYZ。如果我将函数的路径设置为admin/XYZ,则会将错误设置为无效函数,为此,我必须将路径设置为file\u和XYZ函数/XYZ 有没有办法克服这个问题,只需从一个文件中调用所有导入的函数注意:这可能无法回答您的问题,因为我不确定我是否理解您的问题 但是,如果您想将一些代码放入(共享)模块中,并从多个控制器中包含这些代码,我建议您阅读第四章(核心部分),然后搜索local\u import 对
admin/XYZ
,则会将错误设置为无效函数,为此,我必须将路径设置为file\u和XYZ函数/XYZ
有没有办法克服这个问题,只需从一个文件中调用所有导入的函数注意:这可能无法回答您的问题,因为我不确定我是否理解您的问题 但是,如果您想将一些代码放入(共享)模块中,并从多个控制器中包含这些代码,我建议您阅读第四章(核心部分),然后搜索
local\u import
对于这种情况,web2py
提供了另一种导入模块的方法
以这样的方式,全局sys.path
未更改:通过将其放置在
应用程序的“模块”文件夹。
一个好处是模块
将自动复制并
与应用程序一起分发;
然而,有一些是肯定的
适用的限制。web2py
提供一个本地_导入函数,该函数
必须用于从导入模块
“模块”文件夹
模块的导入取决于模块以及web2py可以在哪里找到它们。如果它是web2py可以在sys.path或web2py/站点包中找到的标准模块,则导入模块名应按预期工作
对于应用程序的本地模块,web2py还提供了其他功能:applications/appname/modules
可以使用local\u import
导入这些模块
mymodule=local\u导入(模块)
这将在“应用程序本地模块”文件夹中导入名为“模块”的模块,并使其在名为“mymodule”下可用。注意,local_import支持两个附加参数:reload和app。在开发过程中,模块代码经常更改,因此不要忘记告诉web2py在每次请求时使用参数
reload=True
重新加载模块,否则除非重新启动web2py,否则您将看不到更改 您可以在modules文件夹中创建python文件并导入它们,就像在控制器中导入python库一样。但是你必须给出这些文件的路径,比如
from applications.myApp.modules.myModule import *
从applications.myApp.modules.myModule导入*
这是我的包装解决方案。现在,您可以通过调用函数名来使用它们
myFunction
MyFunction您有XYZ作为文件名吗?哪种代码?你的密码?admin.py是您自己的函数还是更改了glion/admin.py核心文件?您的应用程序/模块下的admin/XYZ文件在哪里?很抱歉,我们需要更多信息。如果您在web2py邮件列表上提问,您将获得更好的支持。很抱歉造成混淆,我已经编辑了问题本身。admin.py是我自己的文件(在controllers中),我在该文件中导入了一个函数XYZ。我不能像调用admin.pyNote中定义的函数那样调用该函数,web2py控制器(和模型)文件不是Python模块,因此不能从它们导入。您应该将模块放在/app/modules文件夹中。你想达到什么目标?您是否只是为了组织目的而尝试将函数放入多个控制器文件中,但在URL中只需要一个控制器名称?在这种情况下,您可以通过URL重写功能实现您的目标。感谢URL重写功能,这正是我要寻找的。注意,从web2py 1.96.1开始,local_导入已被弃用。现在可以使用标准Python导入语句从/app/modules文件夹导入模块。例如,对于/app/modules/mymodule.py,只需执行
导入mymodule
。感谢您的回复。如果我必须从文件中的某个地方调用该函数,那么您所说的是真的。如果我想直接从导入它们的文件中使用相同的函数,则没有找到此类函数(有关更多详细信息,请参阅我的问题)您不能像文件中的本机函数那样调用这些函数,因为您导入的那些函数是在运行时导入的,因此您的服务器无法将请求定向到这些函数,因为它们不存在。作为最后手段,您可以将调用这些导入函数的伪函数放在内部。一切都发生了。这就是我们使用URL重写的地方:)