【问题标题】:Flask __init__.py import errorFlask __init__.py 导入错误
【发布时间】:2015-11-25 20:57:17
【问题描述】:

我无法将其他文件中的函数导入烧瓶中的__init__.py。从文件中导入某些内容会出现错误 500。

__init__.py

from flask import Flask
from fel import fel

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == '__main__':
    app.run(debug=True)

fel.py

def fel(a,b):
    c = a+b
    return (c)

如果我删除 __init__.py 文件中的以下行

from fel import fel

一切正常。

__init__.pyfel.py在同一个目录

我正在使用 Python 3.4

错在哪里? 编辑: 结构

FlaskApp\
  __init__.py  
  fel.py

【问题讨论】:

  • 包名(目录)是什么?
  • 您是否期望 from fel import fel 是 Python 2 风格的相对导入,从 whatever_your_package_is.fel 导入 fel 函数?在 Python 3 中,相对导入必须是显式的。
  • 目录是 FlaskApp

标签: python python-3.x flask


【解决方案1】:

使用相对导入

from .fel import fel

fel(something)

解释:

import fel 的问题是你不知道它是不是一个 绝对导入或相对导入。 fel 可以是 python 中的一个模块 路径,或者当前模块中的包。

来源https://softwareengineering.stackexchange.com/questions/159503/whats-wrong-with-relative-imports-in-python

【讨论】:

    【解决方案2】:

    你的导入应该是:

    from FlaskApp.fel import fel
    

    并且FlaskApp 的父目录需要以某种方式存在于您的sys.path 中(例如,设置 PYTHONPATH 环境变量)。

    【讨论】:

      【解决方案3】:

      只是

      from flask import Flask
      from .fel import fel
      
      
      app = Flask(__name__)
      
      @app.route('/')
      def hello_world():
          number = fel(4,6)
          return (number)
      
      if __name__ == '__main__':
          app.run(debug=True)
      

      【讨论】:

      • 仍然错误 500 我在我的 digitalocean vps 和 pythonanywhere 上测试
      • -wim 是的,你的权利不是选项,但适用于测试
      • Ritero try this to test error: comment fel import and into the hello_world add try: from fel import fel except ImportError , e: return str(e)
      • 非常感谢您对 oskararenas 的帮助,但解决方案 wim 对我有用 :)
      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 2016-10-09
      • 2020-07-02
      • 1970-01-01
      • 2016-06-14
      • 2017-03-12
      • 1970-01-01
      • 2014-05-21
      相关资源
      最近更新 更多