3

我将一个模块复制到 web2py 中应用程序的“模块”文件夹中。当我尝试在任何控制器内的任何函数中导入模块时,我收到以下错误:

<type 'exceptions.ImportError'> No module named module_name

无论使用任何模块,我都会收到该错误。但是,如果我将相同的模块复制到“站点包”并导入它,它就可以完美运行。

我发现“sys.path”不包含模块文件夹,但包含“站点包”文件夹。

如何将模块文件夹添加到特定于 web2py 的“sys.path”,或者有没有其他方法可以解决这个问题?

4

5 回答 5

4

终于找到了解决我的问题的方法。

似乎为了使用 导入模块目录中的模块import module_name,应用程序的名称必须全部小写。

以前,我的应用程序的名称是projectX,但是当我将其更改为应有projectximport module_name工作时。

我还发现,无论应用程序名称如何,在导入模块时显式声明应用程序名称也有效。import applications.projectX.modules.module_name当应用程序的名称为projectX.

于 2012-09-09T04:02:23.787 回答
1

您是否已经尝试使用本地导入?

像这样的东西:

twitter = local_import('twitter')

其中 twitter 是我保存在 modules 文件夹中的模块的名称。

干杯

于 2012-08-08T14:31:19.167 回答
0

它应该完全按照您的预期工作,并且对我有用。无需更改 sys.path。web2py 负责这个。它期望在该目录中找到模块。什么版本的 web2py?你是从源头运行的吗?(它下载源代码分发并将其作为 python web2py 启动,或者您是否使用预编译的二进制分发?)当您说“在控制器内的任何函数中导入该模块”时,您到底想做什么?对我来说,在我的默认控制器顶部或模型中的简单导入适用于当前稳定版本。

于 2012-07-31T21:17:23.990 回答
0

这是允许 PyCharm 为我解析引用的导入格式:

import applications.dashboard.modules.user_info as user_info
于 2016-06-23T20:25:04.020 回答
0

我为此找到的解决方法是确保应用程序是一个包。

例如,如果您有 foo 应用程序并且您的树看起来像这样:

applications
├── __init__.py      <----- This file is probably missing
├── yourapplication
│   └── modules
│       ├── ...
├── ...
于 2016-07-21T05:16:32.480 回答