Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
部署python3 WSGI Flask应用程序时的相对导入_Python_Python 3.x_Flask_Wsgi - Fatal编程技术网

部署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

从那以后运气好吗?我对答案感兴趣。