在这个结构中:
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中,在公司文件夹中,导入工作没有任何问题。
答案 0 :(得分:1)
问题不在于您的代码,而在于您运行它的方式:
我正在运行python manage.py
为此,您的工作目录必须为app
。当前工作目录会自动添加到您的sys.path
。这里有两种可能性,它们都很糟糕:
包含app
的目录更可能不在sys.path
上,所以就Python而言,没有名为{{1的顶级包}}
包含app
的目录在app
上的可能性较小,以及sys.path
本身也是如此。在这种情况下,您将混淆导入器的地狱,因为相同的文件或目录最终可能导入为app
中具有不同名称的两个或多个单独的对象。很难准确预测可能导致的问题,但这会导致问题。
无论哪种方式,解决方案都是不以那种方式运行。而是从一个目录运行它,sys.modules
所在的目录。这意味着您必须通过以下方式之一运行它:
app