在一个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导入失败内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论