Python导入模块未找到错误

时间:2014-05-15 17:35:01

标签: python

我的目录设置如下:

/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的变化是否相关。谢谢!

2 个答案:

答案 0 :(得分:1)

与@sharth一样,我试图复制你的文件结构并复制你的错误,但没有成功。我能让它失败的唯一方法是删除db.py。因此,您需要确保在db.py目录中确实有app个文件。

它可以引起你注意的一些方法:

  1. 您有db.py.txt或其他扩展程序。您的设置可能不会自动显示文件扩展名,因此即使您认为您正在查看python文件,它实际上也不是.py文件。

  2. 这个名字在某种程度上得到了错字。也许是文件名,也许是扩展名。例如,db.oy

  3. 您有旧.pyc个文件。在我测试时,我删除了db.py,但它仍然有效,因为我仍然在目录中有.pyc个文件。只有在我删除它们之后才发生错误。

答案 1 :(得分:0)

目录中的__init__.py文件应为空,因为该文件是“魔术文件”。 所以你必须考虑重新设计导入你的包! 所以,让你的__init__.py文件为空,然后就可以了!