首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部署python3 WSGI应用程序时的相对导入

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

Stack Overflow用户
提问于 2017-04-20 13:59:03
回答 2查看 453关注 0票数 4

当我试图运行ImportError: No module named 'parse_data’时,我正在接收错误python wsgi.py

当我手动调用它时,应用程序运行良好:

代码语言:javascript
复制
$/var/www/myapp# python src/app.py
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

文件夹结构如下:

代码语言:javascript
复制
myapp
|-- src
|   |-- __init__.py
|   |-- app.py
|   |-- parse_data.py
|   |-- static
|   `-- templates
`-- wsgi.py

含量( wsgi.py )

代码语言:javascript
复制
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 )

代码语言:javascript
复制
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中,但这似乎没有任何效果。

奇怪的是,使用python2.7似乎一切正常。

EN

回答 2

Stack Overflow用户

发布于 2021-01-01 19:51:28

对于被困的人,您可以使用以下方法:

代码语言:javascript
复制
from . import parse_data
票数 0
EN

Stack Overflow用户

发布于 2022-03-11 23:30:53

我击中了这个确切的问题,很难找到!

我不知道您是如何初始化uWSGI实例的,但这在这里似乎很关键。

我的文件夹结构和你略有不同。我将导入的模块放在自己的子文件夹中,如下所示:

代码语言:javascript
复制
myapp
|-- src
|   |-- __init__.py
|   |-- app.py
|   |-- parse_data
|   |   |-- __init__.py
|   |   `-- parse_data.py
|   |-- static
|   `-- templates
`-- wsgi.py

我能够通过将app.py的位置添加到uWSGI中的"pythonpath“配置来解决这个问题。

我使用的是uwsgi.ini配置文件,而不是wsgi.py。修复后,我的配置文件如下所示:

代码语言:javascript
复制
chdir = /path/to/myapp
plugin = python
wsgi-file = ./src/app.py
callable = app

; Next line is the fix
pythonpath = ./src

就您的情况而言,我认为这意味着您的wsgi.py需要增加一行:

代码语言:javascript
复制
sys.path.append('/var/www/myapp/src')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43521672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档