我正在尝试使用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.MySQLConnection
。
Application.App
也会导入Engine.Errors
和Views.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之后达到某种程度。 任何人都可以告诉我哪里犯了错误吗?(我可以根据要求提供更多代码,但是现在我停在这里,因为这个问题变得更加混乱和混乱)。
答案 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
)的目录列表中。这可以通过各种方式安排。
由于您使用python start.py
启动应用程序,因此该目录
包含start.py
的内容会自动添加到搜索路径中。所以
你可以改变
from Blog.Views import Home
到
from Views import Home
另一种选择是将start.py
向上移动一级
Blog
目录。然后当你拨打python start.py
时,
包含start.py
的目录也将是目录
包含Blog
。因此Python在执行Blog
from
Blog.Views ...
最后,您可以将Blog
目录添加到PYTHONPATH环境中
变量