我正在尝试使用 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 之后的内容。 谁能告诉我我在哪里犯了错误?(我可以根据要求提供更多代码,但现在我就停在这里,因为这个问题变得越来越困惑)。
最佳答案
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
向上移动一级,从博客
目录。然后当你调用python start.py
时, 包含start.py
的目录也将是该目录 包含博客
。所以Python在执行from时会找到
Blog
博客. View ...最后,您可以将
Blog
目录添加到您的 PYTHONPATH 环境中 变量。
关于python - 无法让导入在 web.py 项目中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13221021/