簡體   English   中英

從根導入模塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM