当前位置: 代码网 > it编程>前端脚本>Python > Python从wsgi导入失败的问题解决方法

Python从wsgi导入失败的问题解决方法

2025年04月23日 Python 我要评论
在一个apache2/flask服务器上,有一个文件夹结构如下:/var/www/myapp/var/www/myapp/routing.py/var/www/myapp/__init__.py/va

在一个apache2/flask服务器上,有一个文件夹结构如下:

/var/www/myapp
/var/www/myapp/routing.py
/var/www/myapp/__init__.py
/var/www/wsgi-scripts/myapp.wsgi

myapp文件夹中的应用程序文件(routing.py)如下:

from flask import flask, render_template
app = flask(__name__)

@app.route('/')
def welkom():
    return render_template('welkom.html')


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

wsgi-scripts中的myapp.wsgi文件如下:

import sys
sys.path.insert(0, '/var/www/myapp')
from myapp import routing as application

但是当我加载页面时,日志中出现以下错误:

[fri mar 15 08:06:32 2013] [error] [client 192.168.1.11] mod_wsgi (pid=23574): target wsgi script '/var/www/wsgi-scripts/myapp.wsgi' cannot be loaded as python module.
[fri mar 15 08:06:32 2013] [error] [client 192.168.1.11] mod_wsgi (pid=23574): exception occurred processing wsgi script '/var/www/wsgi-scripts/myapp.wsgi'.
[fri mar 15 08:06:32 2013] [error] [client 192.168.1.11] traceback (most recent call last):
[fri mar 15 08:06:32 2013] [error] [client 192.168.1.11]   file "/var/www/wsgi-scripts/myapp.wsgi", line 3, in <module>
[fri mar 15 08:06:32 2013] [error] [client 192.168.1.11]     import myapp.routing as application
[fri mar 15 08:06:32 2013] [error] [client 192.168.1.11] importerror: no module named myapp.routing
[fri mar 15 08:06:32 2013] [error] [client 192.168.1.11] mod_wsgi (pid=23575): target wsgi script '/var/www/wsgi-scripts/myapp.wsgi' cannot be loaded as python module.
[fri mar 15 08:06:32 2013] [error] [client 192.168.1.11] mod_wsgi (pid=23575): exception occurred processing wsgi script '/var/www/wsgi-scripts/myapp.wsgi'.
[fri mar 15 08:06:32 2013] [error] [client 192.168.1.11] traceback (most recent call last):
[fri mar 15 08:06:32 2013] [error] [client 192.168.1.11]   file "/var/www/wsgi-scripts/myapp.wsgi", line 3, in <module>
[fri mar 15 08:06:32 2013] [error] [client 192.168.1.11]     import myapp.routing as application
[fri mar 15 08:06:32 2013] [error] [client 192.168.1.11] importerror: no module named myapp.routing
[fri mar 15 08:06:33 2013] [error] [client 192.168.1.11] mod_wsgi (pid=23577): target wsgi script '/var/www/wsgi-scripts/myapp.wsgi' cannot be loaded as python module.
[fri mar 15 08:06:33 2013] [error] [client 192.168.1.11] mod_wsgi (pid=23577): exception occurred processing wsgi script '/var/www/wsgi-scripts/myapp.wsgi'.
[fri mar 15 08:06:33 2013] [error] [client 192.168.1.11] traceback (most recent call last):
[fri mar 15 08:06:33 2013] [error] [client 192.168.1.11]   file "/var/www/wsgi-scripts/myapp.wsgi", line 3, in <module>
[fri mar 15 08:06:33 2013] [error] [client 192.168.1.11]     import myapp.routing as application
[fri mar 15 08:06:33 2013] [error] [client 192.168.1.11] importerror: no module named myapp.routing
[fri mar 15 08:06:33 2013] [error] [client 192.168.1.11] mod_wsgi (pid=23573): target wsgi script '/var/www/wsgi-scripts/myapp.wsgi' cannot be loaded as python module.
[fri mar 15 08:06:33 2013] [error] [client 192.168.1.11] mod_wsgi (pid=23573): exception occurred processing wsgi script '/var/www/wsgi-scripts/myapp.wsgi'.
[fri mar 15 08:06:33 2013] [error] [client 192.168.1.11] traceback (most recent call last):
[fri mar 15 08:06:33 2013] [error] [client 192.168.1.11]   file "/var/www/wsgi-scripts/myapp.wsgi", line 3, in <module>
[fri mar 15 08:06:33 2013] [error] [client 192.168.1.11]     import myapp.routing as application
[fri mar 15 08:06:33 2013] [error] [client 192.168.1.11] importerror: no module named myapp.routing

解决方案

问题的原因是python从wsgi导入失败,可能是因为以下原因:

  • myapp.routing模块没有被正确导入。
  • myapp.routing模块没有被正确定义。

方法一:

第一个答案中给出的解决方案是:

  • 直接导入routing模块,而不是myapp.routing模块。
  • 将application定义为一个函数,而不是一个模块。

代码示例:

# myapp.wsgi
import sys
sys.path.insert(0, '/var/www/myapp')

from routing import app as application
# routing.py
def app(environ, start_response):
    app.debug = 'true'
    app.run()

方法二:

第二个答案中给出的解决方案是:

  • 使用site.addsitedir()函数将myapp目录添加到python的包路径中。
  • 使用sys.path[:] = new_sys_path将新路径放在python的包路径的前面。

代码示例:

# myapp.wsgi
alldirs = ['/var/www/myapp/']

import sys 
import site 

# remember original sys.path.
prev_sys_path = list(sys.path) 

# add each new site-packages directory.
for directory in alldirs:
  site.addsitedir(directory)

# reorder sys.path so new directories at the front.
new_sys_path = [] 
for item in list(sys.path): 
    if item not in prev_sys_path: 
        new_sys_path.append(item) 
        sys.path.remove(item) 
sys.

 到此这篇关于python从wsgi导入失败的问题解决方法的文章就介绍到这了,更多相关python wsgi导入失败内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com