Python从wsgi导入失败的问题解决方法
在一个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导入失败内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
安装Keras,tensorflow,并实现将虚拟环境添加到jupyter notebook
这篇文章主要介绍了安装Keras,tensorflow,并实现将虚拟环境添加到jupyter notebook,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-03-03
python如何用pymodbus库进行modbus tcp通信
这篇文章主要介绍了python如何用pymodbus库进行modbus tcp通信问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-06-06
django model 条件过滤 queryset.filter(**condtions)用法详解
这篇文章主要介绍了django model 条件过滤 queryset.filter(**condtions)用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-05-05
pytorch和tensorflow计算Flops和params的详细过程
这篇文章主要介绍了pytorch和tensorflow计算Flops和params,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-08-08
关于windows下Tensorflow和pytorch安装教程
Tensorflow是广泛使用的实现机器学习以及其它涉及大量数学运算的算法库之一。这篇文章主要介绍了Tensorflow和pytorch安装(windows安装),需要的朋友可以参考下2020-02-02


最新评论