从根导入模块

时间:2014-10-15 00:17:24

标签: python python-2.7 flask

在这个结构中:

app
  -companies
     --models.py
     --__init__.py
  -manage.py
  -__init__.py

models.py

class Company():
   pass

manage.py

from flask import Flask

app = Flask(__name__)

from app.companies.models import Company

if __name__ == '__main__':
    manager.run() 


ImportError: No module named app.companies.models

是什么原因?在views.py中,在公司文件夹中,导入工作没有任何问题。

1 个答案:

答案 0 :(得分:1)

问题不在于您的代码,而在于您运行它的方式:

  

我正在运行python manage.py

为此,您的工作目录必须为app。当前工作目录会自动添加到您的sys.path。这里有两种可能性,它们都很糟糕:

  • 包含app的目录更可能不在sys.path上,所以就Python而言,没有名为{{1的顶级包}}

  • 包含app的目录在app上的可能性较小,以及sys.path本身也是如此。在这种情况下,您将混淆导入器的地狱,因为相同的文件或目录最终可能导入为app中具有不同名称的两个或多个单独的对象。很难准确预测可能导致的问题,但这会导致问题。

无论哪种方式,解决方案都是不以那种方式运行。而是从一个目录运行它,sys.modules所在的目录。这意味着您必须通过以下方式之一运行它:

app