mod_python with apache2,(重新)导入模块错误

mod_python with apache2,(重新)导入模块错误,apache2,mod-python,cgi-bin,Apache2,Mod Python,Cgi Bin,我试图让mod python与apache2一起工作,但没有任何成功。我已经学习了一些让mod python工作的教程,但是我看不出我做错了什么 当我访问时,我实际上得到了我的404页面!(然而,如果文件真的不存在,我会得到一个403禁止) 以下是我的设置: 在/etc/apache2/sites enabled/中,有以我的每个域命名的配置文件。在中,我已将其添加到用户指令部分: # Begin user directives <-- <Directory /home/defaul

我试图让mod python与apache2一起工作,但没有任何成功。我已经学习了一些让mod python工作的教程,但是我看不出我做错了什么

当我访问时,我实际上得到了我的404页面!(然而,如果文件真的不存在,我会得到一个403禁止)

以下是我的设置:

在/etc/apache2/sites enabled/中,有以我的每个域命名的配置文件。在中,我已将其添加到用户指令部分:

# Begin user directives <--
<Directory /home/default/site.example.com/user/htdocs/cgi-bin/>
     Options Indexes FollowSymLinks MultiViews
     AllowOverride AuthConfig
     Order allow,deny
     allow from all
     AddHandler mod_python .py
     PythonHandler mod_python.publisher
     PythonDebug On
</Directory>
# --> End user directives
如上所示,我得到一个
404/python/test.py文件,但在这台服务器上找不到它

但如果我取消对最后一行的注释:

Mod_python error: "PythonHandler mod_python.publisher"

Traceback (most recent call last):

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 299, in HandlerDispatch
    result = object(req)

  File "/usr/lib/python2.4/site-packages/mod_python/publisher.py", line 98, in handler
    path=[path])

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 457, in import_module
    module = imp.load_module(mname, f, p, d)

  File "/home/default/site.example.co.uk/user/htdocs/python/test.py", line 5, in ?
    print 1/0

ZeroDivisionError: integer division or modulo by zero
这个回溯看起来对吗?顺便说一下,启用cgitb没有任何效果


是否有任何其他信息可以帮助诊断此问题?

对于初学者,我建议不要使用
cgi-bin
目录,因为这是用于cgi脚本的。使用mod_Python加载的Python文件不是CGI脚本。(理论上,您应该能够从
cgi-bin
目录加载Python文件,但如果您为Python文件指定自己的目录,则调试会更容易。)

现在,您的文档根目录是
/home/default/site.example.com/user/htdocs
,因此我建议您创建它的子目录,比如
/home/default/site.example.com/user/htdocs/python
,以便将python文件放入其中-仅用于测试。不要为此目录创建任何
Alias
ScriptAlias
指令(因为它已经在文档根目录下),但您需要在虚拟主机文件中放置类似的内容:

<Directory /home/default/site.example.com/user/htdocs/python/>
     Order allow,deny
     Allow from all
     AddHandler mod_python .py
     PythonHandler mod_python.publisher
     PythonDebug On
</Directory>

命令允许,拒绝
通融
AddHandler mod_python.py
PythonHandler mod_python.publisher
蟒蛇

。将文件
test.py
移动到该目录,然后尝试转到
http://site.example.com/python/test.py
,而且据我所知,您应该可以在文件
test.py

中看到
index
函数的结果,发布者处理程序需要接收请求对象和方法才能返回响应

在我的脚本中,我有如下内容:

#!/usr/bin/python  
def run(req):
  return 'Hello world!'
那么,去

在本例中,req是发布服务器处理程序传入的请求对象

而且,如果您还没有,您需要在test.py所在的同一目录中有一个
\uuuu init\uuu uuu.py
文件


另外,对于发布者,我注意到有时响应会被缓存。我将在浏览器中返回我已修复的相同错误。因此,如果您看到一个您认为已经修复的错误,那么重新启动apache不是一个坏主意。

为了获得所需的输出,python文件应该如下所示:

def index():
  return "hello world"
“”默认情况下打开函数“index”

“”将打开函数“run”


您可以使用fancier,但上面的内容将为您提供一个基本的mod_python页面。

谢谢,刚刚尝试过,我得到了这个wierd错误模式:如果脚本有错误,它会显示出来;脚本没有错误。。。举起404!发布test.py的内容怎么样?(把它编辑成你的问题)好的,布里尔,现在可以了!谢谢对于我过去使用的基于服务器的python,您只需将输出打印给用户。PythonHandler有哪些不同的选项?当我直接打印到输出(包括页眉)时,我使用的是哪一个?别以为是PSP。作为CGI脚本的Python?嗯,它可能是作为CGI脚本的Python,也可能是mod_Python中的CGI处理程序。他们几乎一样。如果您想以这种方式使用mod_python,请在Apache conf文件中使用:pythonnandler mod_python.cgihandler,那么您的普通python CGI脚本应该可以工作。+1。我有PythonHandler mod_python.publisher。必须将其更改为pythonnandler mod_python.cgihandler,以使python脚本作为cgi工作。
def index():
  return "hello world"