部署python3 WSGI Flask应用程序时的相对导入

时间:2017-04-20 13:59:03

标签: python python-3.x flask wsgi

我在尝试运行ImportError: No module named 'parse_data’时收到错误python wsgi.py

当我手动调用它时,应用程序运行正常:

$/var/www/myapp# python src/app.py
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

文件夹结构如下:

myapp
|-- src
|   |-- __init__.py
|   |-- app.py
|   |-- parse_data.py
|   |-- static
|   `-- templates
`-- wsgi.py

wsgi.py的内容

import os
import sys

PROJECT_DIR = '/var/www/myapp'
sys.path.insert(0, PROJECT_DIR)

sys.path.append('/var/www/myapp/app')

def execfile(filename):
    globals = dict( __file__ = filename )
    exec( open(filename).read(), globals )

activate_this = os.path.join( PROJECT_DIR, 'pyenv/bin', 'activate_this.py' )
execfile( activate_this )

from src.app import app as application

app.py的内容

from flask import Flask
from flask import render_template, url_for
import sys

import parse_data

app = Flask(__name__)


@app.route("/dashboard")
def dashboard():
    data = parse_data.load_and_format_data()

    title = 'My application'

    return render_template('dashboard.html', data=data, heading=title, page_title=title)


if __name__ == "__main__":
    app.run()

我看不出有什么问题。将import parse_data更改为from src import parse_data会使wsgi正常工作,但会导致python src/app.py中断。

我尝试将sys.path.append('/var/www/myapp')添加到wsgi.py但这似乎没有任何效果。

奇怪的是,使用python 2.7,一切似乎都能正常工作。

1 个答案:

答案 0 :(得分:0)

对于卡住的人,可以使用以下方法:

from . import parse_data