我的目录设置如下:
/directory
/directory/__init__.py
/directory/setup.py
/directory/app/db.py
/directory/app/__init__.py
/directory/__init__.py
文件包含"导入应用"然后由于行"导入db"而导致/directory/app/__init__.py
失败当我尝试运行setup.py文件时。
但是,如果我将错误行更改为"来自app import db"然后它工作正常。为什么是这样?我猜它与我从父目录运行它的事实有关。有没有办法让这项工作?或者我只是将所有导入更改为"来自app import x"即使从app文件夹中调用它?
感谢您的任何澄清。
编辑:这是错误:
Traceback (most recent call last):
File "setup.py", line 2, in <module>
import app
File "/directory/app/__init__.py", line 1, in <module>
import db
ImportError: No module named 'db'
Edit2:此处/directory/app/__init__.py
文件(/directory/__init__.py
为空)
import db
from flask import Flask, render_template
DEBUG = True
app = Flask(__name__)
app.config.from_object(__name__)
@app.route("/")
def hello():
return render_template()
def run(host, port):
db.init_db()
app.run(host=host, port=port)
最终编辑: 我改述了我的问题here并得到了正确的答案。我不确定python3的变化是否相关。谢谢!
答案 0 :(得分:1)
与@sharth一样,我试图复制你的文件结构并复制你的错误,但没有成功。我能让它失败的唯一方法是删除db.py
。因此,您需要确保在db.py
目录中确实有app
个文件。
它可以引起你注意的一些方法:
您有db.py.txt
或其他扩展程序。您的设置可能不会自动显示文件扩展名,因此即使您认为您正在查看python文件,它实际上也不是.py
文件。
这个名字在某种程度上得到了错字。也许是文件名,也许是扩展名。例如,db.oy
。
您有旧.pyc
个文件。在我测试时,我删除了db.py
,但它仍然有效,因为我仍然在目录中有.pyc
个文件。只有在我删除它们之后才发生错误。
答案 1 :(得分:0)
目录中的__init__.py
文件应为空,因为该文件是“魔术文件”。
所以你必须考虑重新设计导入你的包!
所以,让你的__init__.py
文件为空,然后就可以了!