部署python3 WSGI Flask应用程序时的相对导入
我在尝试运行部署python3 WSGI Flask应用程序时的相对导入,python,python-3.x,flask,wsgi,Python,Python 3.x,Flask,Wsgi,我在尝试运行python wsgi.py时收到错误ImportError:没有名为'parse_data'的模块 当我手动调用该应用程序时,它运行良好: $/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_dat
python wsgi.py
时收到错误ImportError:没有名为'parse_data'的模块
当我手动调用该应用程序时,它运行良好:
$/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
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()
app.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
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
从src import parse_data
更改为确实会使wsgi工作,但随后会导致python src/app.py
中断
我已经尝试将sys.path.append('/var/www/myapp')
添加到wsgi.py中,但这似乎没有任何效果
奇怪的是,使用python 2.7时,一切似乎都正常工作。对于那些陷入困境的人,您可以使用以下方法:
from . import parse_data
从那以后运气好吗?我对答案感兴趣。