无法使导入在web.py项目中起作用

时间:2012-11-04 17:29:34

标签: python module web.py importerror

我正在尝试使用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之后达到某种程度。 任何人都可以告诉我哪里犯了错误吗?(我可以根据要求提供更多代码,但是现在我停在这里,因为这个问题变得更加混乱和混乱)。

2 个答案:

答案 0 :(得分:1)

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

如果您从Blog目录运行程序,则只能直接导出Views,就像使用Application.App一样:

from Views import Home

而不是

from Blog.Views import Home

Application/App.py

答案 1 :(得分: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

  3. 时会找到from Blog.Views ...
  4. 最后,您可以将Blog目录添加到PYTHONPATH环境中 变量