簡體   English   中英

Python:無法導入模塊

[英]Python: Unable to import module

我正在從https://blog.miguelgrinberg.com/學習燒瓶

我有應用程序微博,文件名為microblog.py

from app import app

而且我有一個名為app目錄,它包含帶有以下代碼的__init__.py

from flask import Flask
from config import Config

app = Flask( __name__ )
app.config.from_object(Config)
from app import routes

但是當我運行flask run我得到了錯誤

ImportError: No module named 'app'

我了解,例如,如果我想將目錄指示為軟件包,則必須在目錄內包含__init__.py ,而對於app目錄則必須這樣做。

目錄結構

.
├── __init__.py
├── app
│   ├── __init__.py
│   ├── forms.py
│   ├── routes.py
│   └── templates
│       ├── base.html
│       ├── index.html
│       └── login.html
├── config.py
└── microblog.py

完整的堆棧跟蹤


flask run                                       
 * Serving Flask app "microblog.py"
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
Usage: flask run [OPTIONS]

Error: While importing "microblog.microblog", an ImportError was raised:

Traceback (most recent call last):
  File "~/anaconda3/envs/flask_python3.5.2/lib/python3.5/site-packages/flask/cli.py", line 235, in locate_app
    __import__(module_name)
  File "~/learning/migual_flask/microblog/microblog.py", line 1, in <module>
    from app import app
ImportError: No module named 'app'

這段代碼一直工作到最近,突然開始引起麻煩。 我無法找到問題所在。

任何幫助,不勝感激。

謝謝。

好的,根據您在層次結構中發布的內容,很明顯它應該可以工作,但是我懷疑您是從錯誤的目錄導入的。

給定目錄:

.
├── __init__.py
├── app
│   ├── __init__.py
│   ├── forms.py
│   ├── routes.py
│   └── templates
│       ├── base.html
│       ├── index.html
│       └── login.html
├── config.py
└── microblog.py

假設您從根目錄(頂部的“。”)導入它們:

$ls                                                                                                                                                        
__init__.py  app          config.py    microblog.py

$ls app
__init__.py  forms.py     routes.py

# which works
>>> import config
>>> import microblog
>>> import app

# and
>>> from app import routes
>>> from app import forms

我注意到您的app/__init__.pyapp = Flask() ,這是一個非常糟糕的做法,應盡可能避免(這使您認為這很好,我想不到),但是這個對我有用:

>>> import app
>>> from app import app

# the first app is module
# the second is app = Flask()
# but the second one will overwrite the first one's name
# which is another terrible practice

您可以檢查模塊:

>>> import app
>>> help(app) # app = Flask() is there

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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