无法让导入在 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.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 之后到达某个地方。 谁能告诉我哪里出错了?(我可以根据要求提供更多代码,但现在我就到此为止,因为这个越来越混乱)。
【问题讨论】:
【参考方案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 环境中
变量。
【讨论】:
谢谢,这行得通,但是当我运行应用程序时会抛出一个关键错误:如果模块的父目录(不是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在自己的函数中工作