[英]Import a module from the root
在此結構中:
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
是什么原因? 在Companies文件夾內的views.py中,導入可以正常進行。
問題不在於您的代碼,而在於您如何運行它:
我正在運行python manage.py
為此,您的工作目錄必須是app
。 當前的工作目錄會自動添加到您的sys.path
。 這里有兩種可能性,它們都不好:
更有可能的是,包含app
的目錄根本不在sys.path
上,因此就Python而言,沒有名為app
頂級包。
包含app
的目錄和app
app
本身位於sys.path
上的可能性較小。 在這種情況下,您將使導入器感到困惑,因為同一文件或目錄最終可能會作為兩個或多個單獨的對象(在sys.modules
使用不同名稱)被導入。 很難准確預測會導致什么問題,但是會引起問題。
無論哪種方式,解決方案都是不要那樣運行。 而是從一個目錄向上運行該app
所在的目錄。這意味着您必須通過以下方式之一運行它:
python -m app.manage
python app/manage.py
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.