无法将目标WSGI脚本作为Python模块加载
我正在尝试将mod_wsgi与apache一起部署以运行django应用程序,但我收到一个错误500内部服务器错误,apache日志显示:无法将目标WSGI脚本作为Python模块加载,python,django,apache,mod-wsgi,wsgi,Python,Django,Apache,Mod Wsgi,Wsgi,我正在尝试将mod_wsgi与apache一起部署以运行django应用程序,但我收到一个错误500内部服务器错误,apache日志显示: [Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] mod_wsgi (pid=16142): Exception occurred processing WSGI script '/home/user/bms/apache/django.wsgi'. [Thu Jun 23 14:01:47 2
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] mod_wsgi (pid=16142): Exception occurred processing WSGI script '/home/user/bms/apache/django.wsgi'.
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] Traceback (most recent call last):
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] File "/home/user/bms/apache/django.wsgi", line 13, in <module>
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] import django.core.handlers.wsgi
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] ImportError: No module named django.core.handlers.wsgi
我听说这可能是因为apache用户没有正确的权限。然而,我不知道如何解决这个问题。我还试着用www数据用户启动deamon,但这并没有解决问题
编辑:
import sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "advisory_portal.settings")
application = get_wsgi_application()
sys.path.append('C:/xampp/htdocs/advisory_portal/advisory_portal')
sys.path.append('C:/xampp/htdocs/advisory_portal')
我通过将虚拟主机文件复制到默认文件中,然后使用A2Dispatite禁用旧文件来解决这个问题。我不知道如何“正确”地进行设置,使apache转到我想要的虚拟主机。您是否在没有WSGIDaemonProcess选项的情况下进行了尝试 我在家里设置mod_wsgi没有问题,但是没有守护程序选项。您提到了通过移动虚拟主机文件来解决问题,我注意到WSGIDaemonProcess文档中的警告: 还要注意,守护进程的名称 流程组必须是唯一的 整个服务器。也就是说,事实并非如此 可以使用相同的守护进程 以不同的方式处理组名称 虚拟主机
不知道这是否是巧合。我在日志中遇到了类似的错误消息: 无法将目标WSGI脚本“/home/web2py/wsgihandler.py”作为Python模块加载 解决方案是从
/etc/httpd/conf.d/wsgi.conf
我在RedHat上使用CentOS存储库
建议遵循Graham Dumpleton的安装/配置说明。对helloworld应用程序的配置测试表明,mod_wsgi
正在工作,配置出现故障
但是,错误消息几乎没有给出错误的线索。对我来说,问题是WSGI脚本不可执行
sudo chmod a+x django.wsgi
或者只是
sudo chmod u+x django.wsgi
只要您有正确的所有者对我来说,问题在于wsgi python版本不匹配。我使用的是python 3,所以:
$ sudo apt-get remove libapache2-mod-python libapache2-mod-wsgi
$ sudo apt-get install libapache2-mod-wsgi-py3
复制/粘贴这些命令之前,@alxs发出警告:如果服务器上运行的python 2项目使用wsgi和apache,上述命令将有效地关闭它们。我也遇到了同样的问题,起初我没有意识到我可以向下滚动查看实际的错误消息。就我而言,这是一个导入错误:
ImportError: No module named bootstrap3
在通过pip(pip install django-bootstrap3)安装了它之后,我重新启动了Apache,它成功了。我知道这个问题已经很老了,但我刚刚花了大约八个小时来解决这个问题。如果您的系统启用了SELinux,并且已将VirtualNV放在特定位置,则mod_wsgi将无法将指定的
python路径添加到站点包中。它也不会引起任何错误;事实证明,它用于将指定的python路径
添加到站点包的机制是使用pythonsite
模块,特别是site.adduserdir()
。如果目录丢失或无法访问,此方法不会引发任何错误,因此mod_wsgi也不会引发任何错误
无论如何,请尝试使用关闭SELinux
sudo setenforce 0
或者,通过确保运行Apache as的进程具有适当的ACL和SELinux,以访问virtualenv所在的目录。在我自己的例子中,在xampp中的windows上,我在wsgi.py文件中错误地加载了应用程序路径,如下所示:
不正确:
import sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "advisory_portal.settings")
application = get_wsgi_application()
sys.path.append('C:/xampp/htdocs/advisory_portal/advisory_portal')
sys.path.append('C:/xampp/htdocs/advisory_portal')
而不是:
正确:
别忘了导入sys python包,因为这个问题成了一个收集问题解决方案的池,这些问题会导致错误,因此我想添加这个问题
在我的例子中,我想在Ubuntu 16.04.2上使用Apache和WSGI运行OpenStack Keystone(OCTA)。过程开始了,但我一查询keystone就得到了
mod_wsgi (pid=20103): Target WSGI script '/opt/openstack/bin/keystone-wsgi-public' cannot be loaded as Python module.
我有两个vhost,一个有
WSGIDaemonProcess keystone-public ...
WSGIProcessGroup keystone-public ...
而另一个有
WSGIDaemonProcess keystone-admin ...
WSGIProcessGroup keystone-admin ...
我通过重命名它们解决了这个问题。vhost条目现在为:
WSGIDaemonProcess kst-pub ...
WSGIProcessGroup kst-pub ...
及
我没有进一步调查。解决方法对我有效。如果在virtualenv中安装项目的Python依赖项,则还需要将此virtualenv目录的路径添加到Python路径中。为此,请向WSGIPythonPath指令添加一个附加路径,如果使用类似UNIX的系统,则多个路径之间用冒号(:)分隔;如果使用Windows,则多个路径之间用分号(;)分隔。添加到列表中这就是我如何使其工作的
我试图从源代码在CentOS 7上安装CKAN 2.7.2,但一直遇到这个错误。
对我来说,这是因为启用了SELinux。我不需要禁用它。相反,在阅读之后,我发现打开httpd\u可以\u网络\u连接修复它:
setsebool -P httpd_can_network_connect on
从该页:
httpd\u可以\u网络\u连接-允许httpd进行网络连接,
包括您将对数据库进行的本地操作
我遇到了类似的问题,例如apache日志错误“wsgi.py不能作为Python模块加载”
事实证明,我必须停止并启动apache,而不是仅仅重新启动它。在wsgi.py
中追加路径是方向,但不是追加django
追加路径sys.path.append(“/path/to/virtual/environment/lib/pythonX.X/site packages”)
修复了我的问题
这是一个django项目,在Ubuntu16.04上使用python2.7。我遇到了同样的问题,它通过使用
sudo easy_install cx_Oracle
但请记住,在使用easy\u install
安装之前,请先安装cx\u oracle
卸载命令:pip uninstall cx\u oracle
在尝试了许多这些选项后,最终对我有效的解决方案很简单,但很难实现,因为我很难找到实际使用的路径
我用followi创建了一个基于django的夹层项目
WSGIDaemonProcess kst-adm ...
WSGIProcessGroup kst-adm ...
setsebool -P httpd_can_network_connect on
sudo easy_install cx_Oracle
/var/www/mysite$ python3 -m venv ./venv
/var/www/mysite$ source ./venv/bin/activate
(venv) /var/www/mysite$ mezzanine-project mysite
(venv) /var/www/mysite$ cd mysite
(venv) /var/www/mysite/mysite$
/var/www/mysite/mysite/mysite/wsgi.py
...<VirtualHost...>
...
WSGIDaemonProcess mysite python-home=/var/www/mysite/venv python-path=/var/www/mysite/mysite
WSGIProcessGroup mysite
WSGIScriptAlias / /var/www/mysite/mysite/mysite/wsgi.py process-group=accounting
<Directory /var/www/mysite/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
...
</VirtualHost>...
yum remove mod_wsgi
yum install python35u-mod_wsgi
sudo nano /etc/apache2/apache2.conf
WSGIPythonPath /var/www/my_project
import os
import sys
sys.path.append("/var/www/html/myproject")
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
application = get_wsgi_application()