你如何设置Python脚本在Apache 2.0中工作?

我试图跟随一些关于设置mod_python的Google教程,但每次都失败。 你有一个好的,一步一步,坚如磐石的指导?

我的开发盒是OS X,生产 – Centos。

在Apache上运行Python有两种主要的方法。 最简单的方法就是使用CGI并编写正常的Python脚本,而第二个方法是使用像Django或Pylons这样的Web框架。

使用CGI很简单。 确保你的Apache配置文件有一个cgi-bin设置。 如果没有,请按照他们的文档( http://httpd.apache.org/docs/2.0/howto/cgi.html )。 此时,您只需将您的Python脚本放入cgi-bin目录,标准输出将成为HTTP响应。 有关更多信息,请参阅Python的文档( https://docs.python.org/library/cgi.html )。

如果你想使用Web框架,你需要设置mod_python或FastCGI。 这些步骤取决于您要使用的框架。 Django提供了有关如何使用Apache设置mod_python和Django的明确说明( http://www.djangoproject.com/documentation/modpython/

是的,mod_python是相当混乱的设置。 这是我做的。

在httpd.conf中:

Loadmodulee python_module modules/mod_python.so <Directory "/serverbase/htdocs/myapp"> AddHandler mod_python .py PythonHandler myapp PythonDebug On 

并在您的应用程序目录中:

 $ /serverbase/htdocs/myapp$ ls -l total 16 -r-xr-xr-x 1 root sys 6484 May 21 15:54 myapp.py 

重复你想在mod_python下运行的每个python程序的配置。

你在UNIX或Windows上运行Python吗?

mod_python和FastCGI的替代方法是mod_wsgi。 你可以在modwsgi找到更多

我已经在Solaris上构建并安装了这个工具,没有问题。 我曾经尝试mod_python,但作为构建的一部分遇到共享库的问题。 有很好的安装文档可用。

对我来说问题不是在Apache设置,而是了解mod_apache实际上如何使用.py文件。 模块级语句(包括if __name__=='__main__'部分中的那些语句) 不会被执行 – 我认为在命令行中运行脚本的stdout将是服务器将输出的内容,但这不是它的工作原理。

相反,我编写了一个名为index()的模块级函数,并将其作为字符串返回为页面的HTML。 也可以使用其他模块级别的函数(例如otherFunction() ),这些函数可以作为URI中的其他段进行访问(例如testScript/otherFunction文件的testScript.py testScript/otherFunction )。

显然,这比我原来的stdout概念更有意义。 实际使用Python作为脚本语言,而不是一个大型的标记语言更好的能力。