python - PHP 开发人员如何开始使用 MAMP 和 Python?

标签 python mamp

所以我一直在使用 PHP 进行开发,主要在 WordPress 网站上工作。我现在需要学习python。我在网上看了很多,虽然他们提供了关于如何学习 python 语言的简单教程,但我需要学习如何在我本地机器的 MAMP 服务器上开始它的开发。

通常对于 PHP,我会将 index.php 文件转储到 htdocs 文件夹中,然后使用 URL 导航到它,它就可以工作了。我知道 PHP 是最容易部署的,因为我在大学学习过 ASP.NET。不过,对于 Python,我已经了解了 cgi-bin 以及 MAMP 是如何安装 mod_wsgi 和 mod_python 的。我不太熟悉这些术语,也不熟悉如何在 MAMP 上开始使用它。我需要知道如何使用 python 运行网站。学习这门语言很容易,因为我可以从这里自己谷歌它,然后去 Django。

例如,如果我使用这段代码,它会输出hello world:

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

但是,这段代码给我一个错误:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# enable debugging
import cgitb
cgitb.enable()

print "Content-Type: text/plain;charset=utf-8"
print

print "Hello World!"

日志中显示的错误是:

mod_wsgi (pid=1794): Target WSGI script '/Applications/MAMP/htdocs/test/index.py' does not contain WSGI application 'application'.

如您所见,我对那里发生的事情一无所知。我还没有接触任何 MAMP 配置文件。

TL;DR:我想知道如何在我的本地 MAMP 服务器上打开一个简单的 Python 生成的页面。我不知道它是如何工作的。我去哪里学习? (我还不想学语言)

最佳答案

首先:什么是网络服务器?它是一个持久运行的程序,监听特定端口上的传入 HTTP 流量,并通过解析传入的 HTTP 请求并将它们委托(delegate)给适当的处理程序来处理传入的 HTTP 请求。在典型的 MAMP 设置中,Apache 是网络服务器,您的 PHP 脚本是生成内容的代理。

现在,根据上面的定义,您不需要专用的网络服务器。您所需要的只是一个持续运行、监听端口并能够处理 HTTP 请求并产生响应的程序。 Python 有许多框架可以让它自己做到这一点。您只需启动一个 Python 程序,它将自身绑定(bind)到一个端口并为传入的 HTTP 请求生成响应。有关此类别的非常简单的框架,请查看 Tornado .您可以直接使用它的 Hello World 示例,将其放入一个文件中,以 $ python helloworld.py 启动它,您就拥有了一个 Python 网络服务器。

让像 Apache 这样的专用 Web 服务器处理连接管理并将 Python 委托(delegate)给纯内容生产是可能的。为此,Web 服务器需要一种与 Python 应用程序交互的方法。 CGI 是最基本的形式,最接近 PHP 的交互模型:Web 服务器为每个传入请求启动一个 Python 脚本,并将其输出作为响应。但是,这是非常低效的,每次启动和停止脚本都会产生大量开销。将 Python 作为 WSGI 模块运行效率更高。这将启动 Python 脚本一次并使其保持运行,并为 Web 服务器提供一种方法来为每个请求调用此脚本中的特定函数。开销更少,但执行模型与 PHP 截然不同。

关于python - PHP 开发人员如何开始使用 MAMP 和 Python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28798001/

相关文章:

简单的 Python 索引

android - 如何从 Genymotion android 模拟器访问 localhost?

python - 后台进程和 flask

python - nltk中句子的概率树同时使用前瞻和回顾依赖

mysql - 将 CSV 导入 SQL MAMP 支持的数据库的正确语法

php - 无法在动态链接库中找到 MAMP 服务器

ssl - MAMP PRO 上的 SSL 选项卡显示为灰色

php - 在 MAC/MAMP 10.8.4 上使用 PECL 安装 PHP gnupg

结合 setattr 和 getattr 的 Python

python - 如何将多线程与 PySide 和 Twython 结合使用?