【问题标题】:Flask app raises "ImportError: No module named Utils" when startedFlask 应用程序在启动时引发“ImportError:没有名为 Utils 的模块”
【发布时间】:2015-07-19 15:04:19
【问题描述】:

我创建了以下简单的 Flask 应用程序。当我尝试运行它时,我得到ImportError: No module named Utils。我有一个名为email.py 的文件,如果我重命名它,错误就会消失。 python --version 返回 2.7。是什么导致了错误?为什么我重命名模块时它会消失?

from flask import Flask
from flask import request

app=Flask(__name__)

@app.route('/',methods=['GET','POST'])
def home():
return '<h1>home</h1>'
@app.route('/signin',methods=['GET'])
def signin_form():
    return '''<form action="/signin" method="post">
    <p><input name="username"></p>
    <p><input name=password"> type="password"></p>
    <p><button type="submit">Sign In</button></p>
    </form>'''

@app.route('/signin',methods=['POST'])
def signin():

   if request.form['username']=='admin' and request.form['password']=='password':
        return '<h3>hello ,admin!<h3>'
    return '<h3>bad username or password</h3>'

if __name__=='__main__':
    app.run()
Traceback (most recent call last):
  File "D:/learn/suojin.py", line 5, in <module>
    from flask import Flask
  File "C:\Python27\lib\site-packages\flask-0.10.1-py2.7.egg\flask\__init__.py", line 17, in <module>
    from werkzeug.exceptions import abort
  File "C:\Python27\lib\site-packages\werkzeug\__init__.py", line 154, in <module>
    __import__('werkzeug.exceptions')
  File "C:\Python27\lib\site-packages\werkzeug\exceptions.py", line 71, in <module>
    from werkzeug.wrappers import Response
  File "C:\Python27\lib\site-packages\werkzeug\wrappers.py", line 26, in <module>
    from werkzeug.http import HTTP_STATUS_CODES, \
  File "C:\Python27\lib\site-packages\werkzeug\http.py", line 24, in <module>
    from email.Utils import parsedate_tz
ImportError: No module named Utils

【问题讨论】:

  • 这可能是因为flask模块中有一个email类,用于构建应用程序。如果你的应用脚本同名,那么 Python 会很混乱。我刚刚离开你的回溯的最后一行,from email.Utils import parsedate_t
  • 是的,当我重命名它时,它消失了
  • 我的意思是说,电子邮件包和 Utils 模块,而不是电子邮件类,但我希望重命名脚本后一切顺利。

标签: python python-2.7 flask


【解决方案1】:

好的,看起来与您的名为 email.py 的脚本存在命名冲突。 Python中有一个名为email的包,模块为Utils。当 Python 搜索这个包时,它首先在它的路径中找到你的脚本,所以它抓住它并尝试导入 Utils 模块,但找不到它。只需将您的自定义脚本重命名为 email1.py、Email.py 或 email.py 以外的任何内容,就可以了。

【讨论】:

    【解决方案2】:

    我在工作区放置了一个socket.py 文件,并且发生了与您相同的问题。更改文件名以防止模块冲突应该可以解决此问题。

    【讨论】:

      猜你喜欢
      • 2019-05-18
      • 2018-01-26
      • 2023-03-06
      • 2015-08-20
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      相关资源
      最近更新 更多