部署python应用(python 应用)

发布时间:2022-11-09

本文目录一览:

1、[如何部署简单python + flask应用](#如何部署简单python + flask应用) 2、如何创建部署WSGI类型的Python应用 3、[如何部署python3 的应用](#如何部署python3 的应用) 4、如何在服务器上部署python

如何部署简单python + flask应用

所需工具:

  • python3.4
  • flask
  • nginx
  • gunicorn
  • supervisor 系统环境:
  • Ubuntu 14.04LTS 我们先写一个最基本的flask应用: demo.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
    return 'Hello World.'
if __name__ == '__main__':
    app.run()

运行这个py文件,打开浏览器访问127.0.0.1:5000就能看到显示Hello World的页面。 如果让这个flask引用监听来自公网ip的请求,理论上你跑此程序的机器就相当于一个服务器了,然而这个服务器并不完美,所以我们需要nginx和gunicorn来增加它的功能,让它真刀真枪上生产环境的时候能按要求运行。 flask自带的WSGI框架性能很差劲,只能适用于开发环境调试使用。我们用专业一点的gunicorn(还有很多其他优秀的框架)替代flask自带的WSGI框架。 配置完后,通过命令/usr/local/bin/gunicorn -b127.0.0.1:5000启动应用。打开浏览器访问127.0.0.1:5000,同样能够得到返回页面。 然而gunicorn也仅仅是一个python的WSGI框架而已,要让它真正处理来自互联网的各类访问功能还是有点欠缺,这时候就需要用到大名鼎鼎的nginx 服务器来替gunicorn遮风挡雨了。 Ubuntu下安装nginx可以用命令:

sudo apt-get install nginx

安装后需要进行下配置:

cd /etc/nginx/sites-available
sudo vi test

test文件的配置为:

server {
    listen 80; # 监听80端口
    location / {
        proxy_pass http://127.0.0.1:5000; # 代理本机127.0.0.1:5000的服务
    }
    location /static {
        alias /home/ubuntu/myproject/myblog/app/static; # 负载均衡
    }
}
cd ..
cd sites-enable
sudo ln -s ../sites-available/test .
sudo service nginx reload
sudo service nginx restart

这样nginx的基本配置文件就写好了。接下来我们配置进程管理工具supervisor,supervisor可以在后面启动你的python进程,这样很方便。

  1. cd /etc/supervisor/conf.d
  2. sudo vi test.conf
[program:test]
command = /usr/local/bin/gunicorn -b127.0.0.1:5000 /home/ubuntu/myproject/test.py
  1. sudo supervisorctl
  2. reload
  3. start test 如果一切正常,做完这所有步骤之后,现在公网的ip访问你的主机,就可以打开你的flask应用了。

如何创建部署WSGI类型的Python应用

  1. 因为这是部署Python开发环境,所以安装pip可以简化一些软件的安装过程。(PIP对应Lua的luarocks)
sudo apt-get install python-pip

安装三个Python框架:

sudo pip install flask
sudo pip install django==1.5.1
sudo pip install tornado==3.1.1
  1. 安装Gunicorn,这是运行Python的WSGI HTTP服务。
sudo pip install gunicorn
  1. Virtualenv, 安装这个是因为,在部署Django的时候,使用了不同的版本。
sudo pip install virtualenv

第二部分:创建部署应用

1. 创建一个WSGI类型的Tornado应用

import tornado.web
import tornado.wsgi
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("My source code in the MoPaas server by python Tornado!")
settings = {
    "debug" : True,
    "static_path": "static",
}
urls = [
    (r"/", MainHandler),
]
app = tornado.wsgi.WSGIApplication(urls, **settings)

启动这个服务:

gunicorn -w 4 torapp:app -b 0.0.0.0:8888

2. 创建一个Flask应用

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "My source code in the MoPaas server by python Tornado!"
if __name__ == "__main__":
    app.run()

启动这个服务:

gunicorn -w 4 server:app -b 0.0.0.0:8888

3. 创建Django应用

Django是一个比较大的WEB应用,创建各部署的过程,稍微复杂一些。 创建工程:

django-admin.py startproject hotdoc

创建应用:

python manage.py startapp verp

创建数据库表:

python manage.py syncdb

启动工程:

gunicorn hotdoc.wsgi:application -b 0.0.0.0:8888

需要在修改工程目录下的settings.py: 在INSTALLED_APPS中加入verpgunicorn

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'verp',
    'gunicorn'
)

以上,本地开发环境是没问题的。 这些步骤也可以用virtualenv新创建一个虚拟环境完成,本地创建virtualenv可以:

mkdir ~/environments/
virtualenv ~/environments/tutorial/
cd ~/environments/tutorial/bin
source bin/activate

目前的Paas平台上的Python服务就是WSGI形式的应用,比如SAE和Mopaas,不同的是,在SAE上有些现成的例子。Mopaas需要自己从头写,这三个例子在Mopaas生产环境下都运行测试通过。在coding.net的WEB IDE也可成功运行。

如何部署python3 的应用

  • mod_python:这是apache内置的模块,很严重的依赖于mod_python编译使用的python版本,和apache配套使用,不推荐。
  • cgi:这个太old,不推荐,而且nginx不支持cgi方式,只能用lighttpd或者apache。
  • fastcgi:这个是目前流行最广的做法,通过flup模块来支持的,在nginx里对应的配置指令是 fastcgi_pass
  • spawn-fcgi:这个是fastcgi多进程管理程序,lighttpd安装包附带的,和flup效果一样,区别是flup是python代码级引入,spawn-fcgi是外部程序。spawn-fcgi用途很广,可以支持任意语言开发的代码,php,python,perl,只要你代码实现了fastcgi接口,它都可以帮你管理你的进程。
  • scgi:全名是Simple Common Gateway Interface,也是cgi的替代版本,scgi协议很简单,我觉得和fastcgi差不多,只是没有怎么推广开来,nginx对应的配置指令是scgi_pass,你想用就用,flup也支持。
  • http:nginx使用proxy_pass转发,这个要求后端application必须内置一个能处理高并发的http server,在python的web框架当中,只能选择tornado。
  • uwsgi:包括4部分组成,nginx从0.8.4开始内置支持uwsgi协议,uwsgi协议非常简单,一个4个字节header+一个body,body可以是很多协议的包,比如说http,cgi等(通过header里面字段标示),uwsgi的特点在于自带的进程控制程序。它是用c语言编写,使用native函数,其实和spawn-fcgi/php-fpm类似。所以uwsgi可以支持多种应用框架,包括(python,lua,ruby,erlang,go)等等。
  • Gunicorn:和uwsgi类似的工具,从rails的部署工具(Unicorn)移植过来的。但是它使用的协议是 WSGI,全称是Python Web Server Gateway Interface ,这是python2.5时定义的官方标准(PEP 333 ),根红苗正,而且部署比较简单。
  • mod_wsgi:apache的一个module,也是支持WSGI协议。

如何在服务器上部署python

使用pip或easy_install可以管理和安装python的package包,实际上它们都是从pypi服务器中搜索和下载package的。目前在pypi服务器上,有超过三万多个package,同时还允许我们将自己的代码也上传发布到服务器上。这样,世界上的所有人都能使用pip或easy_install来下载使用我们的代码了。 具体步骤如下: 首先创建项目文件和setup文件。 目录文件结构如下:

project/
simpletest/
__init__.py
test.py
setup.py

假设项目文件只有一个simpletest包,里面有一个test.py文件。 创建的setup.py文件格式大致如下,其中,install_requires字段可以列出依赖的包信息,用户使用pip或easy_install安装时会自动下载依赖的包。详细的格式参考文档。

from setuptools import setup, find_packages
setup(
    name = 'simpletest',
    version = '0.0.1',
    keywords = ('simple', 'test'),
    description = 'just a simple test',
    license = 'MIT License',
    install_requires = ['simplejson=1.1'],
    author = 'yjx',
    author_email = 'not@all.com',
    packages = find_packages(),
    platforms = 'any',
)

然后将代码打包。 打包只需要执行以下命令即可:

python setup.py bdist_egg # 生成easy_install支持的格式
python setup.py sdist # 生成pip支持的格式

发布到pypi。 发布到pypi首先需要注册一个账号,然后进行如下两步:

python setup.py register
python setup.py sdist upload

安装测试: 上传成功后,就可以使用pip来下载安装了。 另外,pypi还有一个测试服务器,可以在这个测试服务器上做测试,测试的时候需要给命令指定额外的-r-i选项,如:

python setup.py register -r ""
python setup.py sdist upload -r ""
pip install -i "" simpletest

发布到测试服务器的时候,建议在linux或cygwin中发布,如果是在windows中,参考文档,需要生成.pypirc文件。