2012-07-31 75 views
3

我在web2py中将模块复制到应用程序的“modules”文件夹中。当我试图导入模块中的任何功能的任何控制器里面,我得到以下错误:web2py无法识别模块目录中的模块

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

我得到这个错误,不论使用任何模块。但是,如果我将相同的模块复制到“网站包”并导入它,它完美地工作。

我发现“sys.path”不包含modules文件夹,但包含“site-packages”文件夹。

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

+0

我想你应该尝试建立您的项目在[virtualenv中(HTTP://的PyPI .python.org/PyPI中/的virtualenv/1.7.1.2)。你会在一个更清洁和更简单的环境中运行,而且这很重要,你会减少因犯错误而破坏一切的机会。 – 2012-07-31 12:42:41

+2

/modules文件夹中是否有'__init __。py'文件?如果不是,请添加一个。 – Anthony 2012-07-31 15:04:48

+0

@Alexis即使** virtualenv **将是一个解决方案,我仍然想知道如何做到这一点的web2py方式。 web2py中每个应用程序的“modules”文件夹似乎都是为了类似于我的问题而设计的。所以,我认为这样做会更好。不过,我也在考虑你的建议。 – SUB0DH 2012-07-31 15:06:57

回答

4

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

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

此前,我的申请的名称是projectX,但是当我将其更改为projectximport module_name的工作方式应该如此。

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

0

它应该像你期望的那样工作,而且它对我来说确实如此。没有必要更改sys.path。 web2py照顾这个。它期望在该目录中找到模块。 什么版本的web2py?你从源头上运行? (它下载源代码发布并启动它作为python web2py,或者你是否使用预编译的二进制发行版?) 当你说“在控制器内的任何函数中导入该模块”时,你到底想要做什么? 对我来说,在我的默认控制器或模型的顶部有一个简单的导入,它适用于当前的稳定版本。

+0

我正在使用web2py版本1.99.7 stable。我使用Python 2.7.3通过运行_web2py.py_文件从Windows 8 Consumer Preview下的web2py源代码运行它。我通过在默认控制器的顶部使用import语句导入模块。我曾尝试在控制器的功能中使用它,但也会导致错误。 – SUB0DH 2012-08-01 11:31:19

1

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

事情是这样的:

twitter = local_import('twitter') 

其中Twitter是模块I保存在模块文件夹的名称。

干杯

+0

仍然有类似的错误 \t''type'exceptions.ImportError'>没有名为projectx.modules.findpath'的模块 – SUB0DH 2012-09-09 03:35:46

0

这是进口的格式,使得PyCharm解决我的参考:

import applications.dashboard.modules.user_info as user_info 
0

,我发现这种情况的解决方法是,以确保应用程序是一个包。

举个例子,如果你有foo的应用程序,你的树看起来是这样的:

applications 
├── __init__.py  <----- This file is probably missing 
├── yourapplication 
│   └── modules 
│    ├── ... 
├── ...