无法让导入在 web.py 项目中工作

Posted

技术标签:

【中文标题】无法让导入在 web.py 项目中工作【英文标题】:Cannot get imports to work in web.py project 【发布时间】:2012-10-24 15:13:35 【问题描述】:

我正在尝试使用 Web.Py 在 Python 中创建一个基本的博客应用程序。我一开始没有目录结构,但很快我需要一个。所以我创建了这个结构:

Blog/
├── Application/
│   ├── App.py
│   └── __init__.py
|
├── Engine/
│   ├── Connection/
│   │   ├── __init__.py
│   │   └── mysqlConnection.py
│   ├── Errors.py
│   └── __init__.py
├── __init__.py
├── Models/
│   ├── BlogPostModel.py
│   └── __init__.py
├── start.py
└── Views/
    ├── Home.py
    └── __init__.py

start.py 导入 Application.App,其中包含 Web.Py 内容并导入 Blog.Models.BlogPostModel,其中导入 Blog.Engine.Connection.MySQLConnectionApplication.App 还导入 Engine.ErrorsViews.Home。所有这些导入都发生在构造函数内部,并且所有文件中的所有代码都在类中。当我运行python start.py,其中包含这三行代码:

from Application import App
app = App.AppInstance()
app.run()

打印以下堆栈跟踪:

Blog $ python start.py 
Traceback (most recent call last):
  File "start.py", line 2, in <module>
    Blog = App.AppInstance()
  File "/home/goktug/code/Blog/Application/App.py", line 4, in __init__
    from Blog.Views import Home
ImportError: No module named Blog.Views

但根据我从一些研究中了解到的情况,这应该运行,至少直到它在 App.py 之后到达某个地方。 谁能告诉我哪里出错了?(我可以根据要求提供更多代码,但现在我就到此为止,因为这个越来越混乱)。

【问题讨论】:

【参考方案1】:

App.py 包含语句

from Blog.Views import Home

所以Blog 需要在 Python 搜索模块的目录列表中 (sys.path)。这可以以各种方式排列。

    由于您使用python start.py 启动应用程序,因此目录 包含start.py 的会自动添加到搜索路径中。所以 你可以改变

    from Blog.Views import Home
    

    from Views import Home
    

    另一种选择是将start.py 上移一层,移出 Blog 目录。然后当您拨打python start.py 时, 包含start.py 的目录也将是目录 包含Blog。所以Python在执行from Blog.Views ...时会找到Blog

    最后,您可以将Blog 目录添加到您的 PYTHONPATH 环境中 变量。

【讨论】:

谢谢,这行得通,但是当我运行应用程序时会抛出一个关键错误: at / u'Home' 这听起来像是未显示的代码错误(与此问题无关)。请打开一个新问题并发布更多详细信息(完整的堆栈跟踪和错误消息以及相关代码)。 谢谢,我现在正在写问题。【参考方案2】:

如果模块的父目录(不是Blog 本身)在 python 的路径上,您只能导入模块 Blog

如果你像你一样从Blog 目录运行你的程序,你只能像Application.App 一样直接删除Views

from Views import Home

而不是

from Blog.Views import Home

在您的Application/App.py

【讨论】:

以上是关于无法让导入在 web.py 项目中工作的主要内容,如果未能解决你的问题,请参考以下文章

无法让 css 模块在 Typescript Storybook 项目中工作

无法让 Jquery datepicker 在我的 asp.net mvc 项目中工作

STM32F103C8项目-我无法让HAL在自己的函数中工作

Android:无法让 Checkbox OnClickListener 在 ListFragment 中工作

如何让 splice() 方法在我的待办事项列表中工作?

让 Jest 全局设置和全局拆卸在打字稿项目中工作