2

我正在尝试使用 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 之后达到某个目标。谁能告诉我在哪里犯了错误?(我可以根据要求提供更多代码,但现在我停在这里,因为这个越来越混乱)。

4

2 回答 2

1

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

如果你从Blog目录中运行你的程序,你只能Views直接 imort,就像你做的那样Application.App

from Views import Home

代替

from Blog.Views import Home

在你的Application/App.py.

于 2012-11-04T17:47:20.847 回答
1

App.py包含语句

from Blog.Views import Home

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

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

    from Blog.Views import Home
    

    from Views import Home
    
  2. 另一种选择是start.py向上移动一个级别,从 Blog目录中移出。那么当你调用时python start.py,包含的目录start.py也将是包含的目录Blog。所以Python会Blog在执行时找到from Blog.Views ...

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

于 2012-11-04T17:48:52.987 回答