【问题标题】:web2py doesn't recognize modules in the modules directoryweb2py 无法识别模块目录中的模块
【发布时间】:2025-12-22 10:50:11
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我认为您应该尝试在virtualenv 中设置您的项目。您将在更清洁、更简单的环境中运行,而且,重要的是,您将减少因犯错而破坏一切的机会。
  • 您的 /modules 文件夹中有__init__.py 文件吗?如果没有,请添加一个。
  • @Alexis 尽管 virtualenv 将是一个解决方案,但我仍然想知道如何以 web2py 的方式进行操作。 web2py 中每个应用程序的“模块”文件夹似乎是为与我的问题类似的目的而设计的。所以,我认为这样做会更好。不过,我也在考虑你的建议。
  • @Anthony 是的,模块文件夹中有一个 init.py,但似乎仍然不起作用,因为模块文件夹不在 web2py 的 sys.path 中
  • web2py 还使用local_import 功能吗?那是您使用的SUB吗?我从来没有从任何地方导入自定义模块,除了模块并且只使用 local_import ...

标签: python web2py


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    import applications.dashboard.modules.user_info as user_info
    

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        类似这样的:

        twitter = local_import('twitter')
        

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

        干杯

        【讨论】:

        • 仍然出现类似错误&lt;type 'exceptions.ImportError'&gt; No module named projectx.modules.findpath
        【解决方案5】:

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

        【讨论】:

        • 我使用的是 web2py 版本 1.99.7 稳定版。我通过运行 web2py.py 文件,使用 Python 2.7.3 从 Windows 8 Consumer Preview 下的 web2py 源运行它。我正在使用默认控制器顶部的 import 语句导入模块。我曾尝试在控制器的功能中使用它,但这也会导致错误。