Python编写的网络应用如何部署?

3 投票
3 回答
1309 浏览
提问于 2025-04-16 19:23

我以前是个PHP开发者,现在有点难以适应新的思维方式。我习惯了写nginx配置文件,创建目录,启动nginx和PHP-FPM,然后上传我的代码就能运行。但现在我想开始学习Python,想感受一下这个语言,并开始制作网页应用,但我有点迷茫,不知道该怎么把这些东西搞定。

虽然有些人会建议我使用像Django这样的框架,但我想从最基础的地方了解这一切是怎么运作的。

我看到了一些关于Python网页服务器的比较,发现gevent似乎是我想要的。但这些东西是怎么结合在一起的呢?我还需要nginx作为反向代理吗(除了处理静态内容)?还是说我需要做点别的?我现在有点“初学者盲点”,很难看清楚这些东西是怎么联系在一起的。

3 个回答

0

你需要一些软件来执行你的Python代码。

你可以试试一个完全基于Python的技术栈,比如Tornado

或者你可以使用Apache、Nginx或Lighttpd(我觉得这些都是用C语言写的),然后再加一些模块(比如mod_wsgi、fgci或uWsgi),这样这些网页服务器就能通过wsgi接口来运行你的代码。第二种选择就像Apache加上某个模块来运行你的PHP代码一样。

我有一些生产网站是用Apache加mod_wsgi和Nginx加uWsgi运行的。

0

Python和PHP有点不一样。Python的一个好处是,它有一个标准的接口,这个接口让我们可以在一边使用各种Python应用程序,而在另一边连接不同的网络服务器。这个接口叫做WSGI,你可以在这里了解更多信息。

另外,关于如何通过nginx部署Django应用程序,这里有一篇不错的文章。

2

我自己也是个初学Python的开发者,所以我也有过同样的问题。也许更有经验的用户可以补充一些细节。以下是我到目前为止所做的:

最简单的入门方法就是创建一个可执行的Python脚本(.py文件),然后把它放到你的cgi-bin文件夹里。这样你就可以通过你的主机地址,比如yourhost.com/cgi-bin/your_script.py来访问它。这种方法简单易用,特别适合处理表单等操作。

有些服务器在你添加新的.py脚本后,需要重启服务器才能“看到”这个新脚本,这对于快速开发来说可能会很麻烦。这也是很多人选择使用中间件,比如WSGI的原因之一。下面是我如何修改Apache配置来启用WSGI的:

LoadModule wsgi_module libexec/apache2/mod_wsgi.so

<VirtualHost *:80>

WSGIScriptAlias /myapp /Library/WebServer/wsgi-scripts/views.wsgi

<Directory /Library/WebServer/wsgi-scripts>
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

views.wsgi其实就是一个Python脚本。如果我访问localhost/myapp/anything,它会重定向到views.wsgi。最好不要把这个文件放在根目录下,否则你将无法引用静态文件。

一个简单的应用可能看起来像这样:

def application(environ, start_response):
    start_response('200 OK', [('content-type', 'text/html')])
    return ['Hello world!']

environ包含了用户试图访问的路径信息,所以你可以设置一个URL列表,并告诉程序根据请求的URL调用哪个函数。大概是这样的:

 path      = environ.get('PATH_INFO','')
 if path.startswith('/helloworld'):
  # call your function that returns HTML code

我还没有太多接触框架(比如Django),但我觉得它们的一个优点是可以很方便地使用脚本传递的变量来填充HTML模板。Django的模板引擎允许在HTML中混合使用变量和逻辑(比如if、for等)。当函数被调用时,它返回的内容会发送给客户端。

我对这一切还很陌生,如果这里有错误,请大家指正...

撰写回答