使用WSGI在Windows XAMPP中设置Python路径

2024-04-26 17:16:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Webfaction上设置一个实时服务器的开发版本,在本地计算机XP上的虚拟Apache服务器环境中运行Django应用程序(运行时没有任何错误),在Python2.6上运行XAMPP Lite,我可以通过Git提交更改。

XAMPP在Python中运行良好,服务器在加载WSGI模块后启动良好。问题是,当我设置Python路径时,它们一半设置为nix格式(带/),一半设置为Windows格式(带反斜杠)。

下面是本地机器Apache错误,显示了损坏的python路径:

[Fri Oct 08 14:52:53 2010] [error] [client 127.0.0.1] mod_wsgi (pid=1436): Exception occurred processing WSGI script 'C:/SERVER/Python26/Lib/site-packages/website-cms/webapps/django/dev.wsgi'.
[Fri Oct 08 14:52:53 2010] [error] [client 127.0.0.1] Traceback (most recent call last):
[Fri Oct 08 14:52:53 2010] [error] [client 127.0.0.1]   File "C:/SERVER/Python26/Lib/site-packages/website-cms/webapps/django/lib/python2.5\\django\\core\\handlers\\wsgi.py", line 230, in __call__
[Fri Oct 08 14:52:53 2010] [error] [client 127.0.0.1]     self.load_middleware()
[Fri Oct 08 14:52:53 2010] [error] [client 127.0.0.1]   File "C:/SERVER/Python26/Lib/site-packages/website-cms/webapps/django/lib/python2.5\\django\\core\\handlers\\base.py", line 42, in load_middleware
[Fri Oct 08 14:52:53 2010] [error] [client 127.0.0.1]     raise exceptions.ImproperlyConfigured('Error importing middleware %s: "%s"' % (mw_module, e))
[Fri Oct 08 14:52:53 2010] [error] [client 127.0.0.1] ImproperlyConfigured: Error importing middleware cms.middleware.multilingual: "No module named cms.middleware.multilingual"

以及有问题的.wsgi文件内容:

import os, sys

sys.path.append('C:/SERVER/Python26/')
sys.path.append('C:/SERVER/Python26/Lib/site-packages/website-cms/webapps/django')
sys.path.append('C:/SERVER/Python26/Lib/site-packages/website-cms/webapps/django/lib/python2.5')

from django.core.handlers.wsgi import WSGIHandler

#Add the path to Django itself
os.environ['DJANGO_SETTINGS_MODULE'] = 'website.settings'
application = WSGIHandler()

Apache httpd.conf是XAMPP(而不是虚拟实例)的默认配置,添加了以下内容来加载wsgi模块

LoadModule wsgi_module modules/mod_wsgi-win32-ap22py26-3.3.so

指向wsgi文件:

WSGIScriptAlias / C:/SERVER/Python26/Lib/site-packages/website-cms/webapps/django/dev.wsgi

我知道XAMPP服务器正在使用Python2.6(我被迫使用TortoiseGIT),而产品版本是2.5(由web主机强制执行),但这似乎不是罪魁祸首-我仍然希望至少能够设置正确的路径!

欢迎所有关于让Python路径打球的建议!


Tags: djangoclientwsgiservercmslibpackagessite
2条回答

我还看到了“服务器错误”,并在Apache error.log文件中看到:这是由于注释行“其主要目的是…”后面出现了空格或换行符

我的电脑有Python2.6,所以我将在假设Python2.6是目标版本的情况下使用所有配置。

  1. 下载最新的xampp(http://www.apachefriends.org/en/xampp-windows.html),截至2010年11月29日,1.7.3版是最新的。
  2. 安装xampp for windows,我安装了它c:\ xampp
  3. 下载并安装Python2.6(http://www.python.org/download/releases/2.6/
  4. 下载wsgi for windows-http://code.google.com/p/modwsgi/wiki/DownloadTheSoftware?tm=2 如有必要,请参阅文档-http://code.google.com/p/modwsgi/wiki/InstallationOnWindows
  5. 将so文件复制到模块目录C:\xampp\apache\modules,不要忘记将其重命名为mod wsgi.so
  6. 将以下行添加到C:\xampp\apache\conf\httpd.conf
    • 加载模块wsgi模块/mod wsgi.so
  7. 使用C:\ xampp\xampp-control.exe

为了测试我做了以下步骤。

  1. 创建C:\ xampp\htdocs\wsgi\scripts目录,并复制test test.wsgi。

test.wsgi如下所示。

#!/usr/bin/env python
"""
A simple WSGI test application.

Its main purpose is to show that WSGI support works (meaning that the
web server and the WSGI adaptor / support module are configured correctly).

As a nice plus, it outputs some interesting system / WSGI values as a nice
HTML table.

The main use of this script will be using the WSGI "application" defined
below within your production WSGI environment. You will use some code similar
to what you see at the end of this script to use the application from that
environment. For the special case of apache2/mod_wsgi, it shoud be possible
to directly use this file.

If you start this script from the commandline either with python2.5 or with
and older python + wsgiref module installed, it will serve the content on
http://localhost:8000/ - this is mainly for debugging THIS script.

@copyright: 2008 by MoinMoin:ThomasWaldmann
@license: Python License, see LICENSE.Python for details.
"""
import os.path
import os
import sys

try:
    __file__
except NameError:
    __file__ = '?'

html_template = """\
<html>
<head>
 <title>WSGI Test Script</title>
</head>
<body>
 <h1>WSGI test script is working!</h1>
 <table border=1>
  <tr><th colspan=2>1. System Information</th></tr>
  <tr><td>Python</td><td>%(python_version)s</td></tr>
  <tr><td>Python Path</td><td>%(python_path)s</td></tr>
  <tr><td>Platform</td><td>%(platform)s</td></tr>
  <tr><td>Absolute path of this script</td><td>%(abs_path)s</td></tr>
  <tr><td>Filename</td><td>%(filename)s</td></tr>
  <tr><th colspan=2>2. WSGI Environment</th></tr>
%(wsgi_env)s
 </table>
</body>
</html>
"""
row_template = "  <tr><td>%s</td><td>%r</td></tr>"

def application(environ, start_response):
    mysite = '/Users/smcho/Desktop/django'
    if mysite not in sys.path:
        sys.path.insert(0,'/Users/smcho/Desktop/django')
    mysite = '/Users/smcho/Desktop/django/mysite'
    if mysite not in sys.path:
        sys.path.insert(0,'/Users/smcho/Desktop/django/mysite')

    """ The WSGI test application """
    # emit status / headers
    status = "200 OK"
    headers = [('Content-Type', 'text/html'), ]
    start_response(status, headers)

    # assemble and return content
    content = html_template % {
        'python_version': sys.version,
        'platform': sys.platform,
        'abs_path': os.path.abspath('.'),
        'filename': __file__,
        'python_path': repr(sys.path),
        'wsgi_env': '\n'.join([row_template % item for item in environ.items()]),
    }
    return [content]

if __name__ == '__main__':
    # this runs when script is started directly from commandline
    try:
        # create a simple WSGI server and run the application
        from wsgiref import simple_server
        print "Running test application - point your browser at http://localhost:8000/ ..."
        httpd = simple_server.WSGIServer(('', 8000), simple_server.WSGIRequestHandler)
        httpd.set_app(application)
        httpd.serve_forever()
    except ImportError:
        # wsgiref not installed, just output html to stdout
        for content in application({}, lambda status, headers: None):
            print content
  1. 使C:\xampp\apache\conf\other\wsgi.conf具有以下内容

这是密码

<Directory "C:/xampp/htdocs/wsgi/scripts">
  Options ExecCGI Indexes
  AddHandler cgi-script .cgi
  AddHandler wsgi-script .wsgi  
  Order allow,deny
  Allow from all
</Directory>
Alias /wsgi/ "C:/xampp/htdocs/wsgi/scripts/"
<IfModule wsgi_module>
  WSGIScriptAlias /test "C:/xampp/htdocs/wsgi/scripts/test.wsgi"
</IfModule>
  1. 将此行添加到httpd.confInclude“conf/other/wsgi.conf”
  2. 重新启动apache。
  3. 当您在web浏览器中输入“localhost/test”或“localost/wsgi/test.wsgi”时,您将看到wsgi信息。

相关问题 更多 >