㈠ 如何在 virtualenv 环境下搭建 Python Web
安装组件库第一步安装所需要的存储库,因为打算用到虚拟环境,用到 pip 安装和管理 Python 组件,所以先更新本地包,然后安装组件:sudo apt-get updatesudo apt-get install python-pip python-dev nginx创建虚拟环境 virtualenv在一个系统中创建不同的 Python 隔离环境,相互之间还不会影响,为了使系统保持干净,遂决定用 virtualenv 跑应用程序,创建一个容易识别的目录,开始安装,再创建项目目录 super,然后激活环境:sudo pip install virtualenvmkdir ~/supervisor && cd ~/supervisorvirtualenv supersource super/bin/activate安装 Flask 框架好了,现在在虚拟环境里面,开始安装 Flask 框架,flask 依赖两个库 werkzeug 和 jinjia2, 采用 pip 方式安装即可, pip 是一个重要的工具,Python 用它来管理包:pip install flask先用 Flask 写一个简单的 Web 服务 myweb.py ,因为后面要做一些测试,所以设置了几个请求:from flask import Flaskapp = Flask(__name__)@app.route('/')def index(): return 'hello world supervisor gunicorn '@app.route('/1')def index1(): return 'hello world supervisor gunicorn ffffff'@app.route('/qw/1')def indexqw(): return 'hello world supervisor gunicorn fdfdfbdfbfb 'if __name__ == '__main__': app.debug = True app.run()启动 Flask 看看!python myweb.py在浏览器中访问 http://127.0.0.1:5000 就可以看到了「几个路径都试一试」用 Gunicorn 部署 Python Web现在我们使用 Flask 自带的服务器,完成了 Web 服务的启动。生产环境下,Flask 自带的服务器,无法满足性能要求。所以我们这里采用 Gunicorn 做 wsgi 容器,用来部署 Python,首先还是安装 Gunicorn:pip install gunicorn当我们安装好 Gunicorn 之后,需要用 Gunicorn 启动 Flask,Flask 用自带的服务器启动时,Flask 里面的 name 里面的代码启动了 app.run()。而这里我们使用 Gunicorn,myweb.py 就等同于一个库文件,被 Gunicorn 调用,这样启动:gunicorn -w 4 -b 0.0.0.0:8000 myweb:app其中 myweb 就是指 myweb.py,app 就是那个 wsgifunc 的名字,这样运行监听 8000 端口,原先的 5000 端口并没有启用,-w 表示开启多少个 worker,-b 表示 Gunicorn 开发的访问地址。想要结束 Gunicorn 只需执行 pkill Gunicorn,但有时候还要 ps 找到 pid 进程号才能 kill。可是这对于一个开发来说,太过于繁琐,因此出现了另外一个神器 —supervisor,一个专门用来管理进程的工具,还可以管理系统的工具进程。安装 Supervisorpip install supervisorecho_supervisord_conf > supervisor.conf # 生成 supervisor 默认配置文件gedit supervisor.conf # 修改 supervisor 配置文件,添加 gunicorn 进程管理在 supervisor.conf 底部下添加 myweb.py 的配置 `/home/wang/supervisor/super` 是我的项目目录」[program:myweb]command=/home/wang/supervisor/super/bin/gunicorn -w 4 -b 0.0.0.0:8000 myweb:app directory=/home/wang/supervisor startsecs=0 stopwaitsecs=0 autostart=false autorestart=false user=wang stdout_logfile=/home/wang/supervisor/log/gunicorn.log stderr_logfile=/home/wang/supervisor/log/gunicorn.errsupervisor 的基本使用命令:supervisord -c supervisor.conf supervisorctl -c supervisor.conf status 查看supervisor的状态 supervisorctl -c supervisor.conf reload 重新载入 配置文件supervisorctl -c supervisor.conf start [all]|[appname] 启动指定/所有 supervisor 管理的程序进程supervisorctl -c supervisor.conf stop [all]|[appname] 关闭指定/所有 supervisor 管理的程序进程supervisor 还有一个 web 的管理界面,可以激活。更改下配置:[inet_http_server] ; inet (TCP) server disabled by defaultport=127.0.0.1:9001 ; (ip_address:port specifier, *:port for alliface)username=wang ; (default is no username (open server)password=123 ; (default is no password (open server))[supervisorctl]serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socketserverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socketusername=wang ; should be same as http_username if setpassword=123 ; should be same as http_password if set;prompt=mysupervisor ; cmd line prompt (default "supervisor");history_file=~/.sc_history ; use readline history if available现在可以使用 supervsior 启动 gunicorn 啦。运行命令:supervisord -c supervisor.conf浏览器访问 http://127.0.0.1:9001 可以得到 supervisor 的 web 管理界面,访问 http://127.0.0.1:8000 可以看见 gunicorn 启动的返回的页面。配置 Nginx前面我们已经在系统环境下安装了 Nginx, 安装好的 Nginx 二进制文件放在 /usr/sbin/ 文件夹下,接下来使用 Supervisor 来管理 Nginx。这里需要注意一个问题,权限问题。Nginx 是 sudo 的方式安装,启动的适合也是 root 用户,那么我们现在也需要用 root 用户启动 supervisor。在 supervisor.conf 下添加配置文件:[program:nginx]command=/usr/sbin/nginxstartsecs=0stopwaitsecs=0autostart=falseautorestart=falsestdout_logfile=/home/wang/supervisor/log/nginx.logstderr_logfile=/home/wang/supervisor/log/nginx.err 好了,都配置完之后,启动 supervisor:supervisord -c supervisor.conf访问页面,也可以用 ab 进行压力测试:ab -c 100 -n 100 http://127.0.0.1:8000/qw/1-c 用于指定压力测试的并发数, -n 用于指定压力测试总共的执行次数。安装 Python 探针搭建好了 web,想实时监控应用数据,有什么好的工具,用 OneAPM 的 Python 探针试试,首先也是安装 Python 探针:pip install -i http://pypi.oneapm.com/simple –upgrade blueware根据 License Key 生成配置文件:blueware-admin generate-config (License Key) = blueware.ini由于是在虚拟环境下,所以要特别注意路径,修改 supervisor.conf 里面两项:[program:myapp]command = /home/wang/supervisor/super/bin/blueware-admin run-program /home/wang/supervisor/super/bin/gunicorn -w 4 -b 0.0.0.0:8000 myapp:appenvironment = BLUEWARE_CONFIG_FILE=blueware.ini重启应用supervisorctl # 进入命令行supervisor> reload # 重新加载向上面一样访问页面,也可以用 ab 进行压力测试几分钟后有下图,可以看到页面加载时间,web 事物,页面吞吐量,其中后面是设置自定义事物「Business Transaction」。
㈡ Flask + Nginx + Gunicorn + Gevent部署
==本教程仅适用于linux和Mac== 部署是建立在你已经基本完成开发的基础上,所以Python的安装什么的就不再进行说明了,上述依赖的安装也不再赘述,请根据自己的平台查找安装教程,这里主要对配置进行说明。 Gunicorn的配置相比于uWSGI简单了很多,基本上一行命令就可以把项目跑起来。性能上据说uWSGI更加强大一些,不过在差距上并不明显, 至少在我的日常使用中没有因为Gunicorn出现过性能瓶颈,真的到了那一天再进行更换也不是什么特别麻烦的事情。 在项目跟目录创建一个gunicorn.py文件,当然名字和文件位置你可以进行更改。 这里我们采用gevent模式来支持并发,可以根据你自己的实际情况来进行模式选择。我最近的项目因为阻塞主要是对SAP数据查询导致的,所使用的库并不是纯Python编写,也没有说明支持协程,所以我我采用了gthead模式。 首先我们调用了gevent的Monkey Patch黑科技,该方法hook了标准卡里面的大部分阻塞操作,使得在我们进行长时间IO操作时可以切换到别的协程,从而实现异步并发。然后我们创建log目录,设置log路径,设置端口什么的。 接着我们设置worker的数量,也就是进程数,通常设置为服务器核心数2倍+1,这也是官方文档事例中的配置。最后再设置一下worker的模式,这里填写的就是前文所说的gevent。 更多项目配置请参照官方文档 http://docs.gunicorn.org/en/latest/configure.html# 不管你是用flask-script还是flask-cli来启动项目,一定会有一个入口文件(这名字一定很不规范),里面创建并启动了Flask App实例。这里再创建一个程序入口,这个入口专门为Gunicorn服务,用来启动生产环境。 再根目录创建一个wsgi.py文件,名字目录还是可以随意更改。 这里和你普通的程序入口并没有什么区别,中间对logger的一顿操作是把app的logger修改为gunicorn的,这样我们再上一步设置的log路径才能生效。 测试配置是否正确最简单的方法就是跑一下。 如果你是用了虚拟环境,首先要先进入虚拟环境(这里强烈建议使用虚拟环境,我还是使用传统的virtualenv)。 然后执行命令: gunicorn.py和wsgi:application根据前两部的文件名和变量名自行更改 Uninx哲学,没有消息就是最好的消息,如果没有报错,程序就顺利跑起来了。这时如果有图形界面或者设置的端口是开放给外网的,你就可以访问项目试试看是否成功运行,如果无法通过外网访问并没有图形界面,也可以通过wget命令进行测试,请确保这个步骤正确再进行下一步操作。如果这一步顺利完成,就可以Ctrl+C退出了,因为我们不需要手动启动项目,接下来我们将通过Supervisor来帮助我们管理项目的进程。 Supervisor是一个用Python编写的进程管理工具,我们这里通过他来管理我们的项目进程,开启关闭啥的。 首先检查是否存在配置文件,一般配置文件的路径是 如果配置文件不存在,我们可以通过命令来生成 配置文件的内容很多,项目配置可以参照官网文档 http://www.supervisord.org/introction.html 打开配置文件的最后一行 默认一般是注释掉的,我们可以取消注释,这行配置的作用也很浅显,就是导入设置的路径下的所有conf文件,这使得我们如果有多个项目可以不用都写在同一个配置文件里,可以一个项目一个配置文件,更适合管理。这里的路径也是可以按照实际需求随意更改。这里需要重启Supervisor服务,我刚开始做的时候都是直接重启服务器,不过如果你没有把Supervisor自启动,重启后需要手动启动Supervisord 在设置的路径下新建一个配置文件,命令请根据上一步设置的扩展名。 project_name按照你的实际需求修改,作为你这个服务的唯一标识,用于启动停止服务时使用。 command修改为测试gunicorn时使用的命令,这里我因为使用了虚拟环境,所以我使用了绝对路径,指向了虚拟环境的gunicorn,这种配置我个人还是喜欢都使用绝对路径。 directory指定了工作路径,通常设置为项目根目录,我们填写的gunicorn.py和wsgi都是基于这个路径的。 更多配置请参照官网的配置文档。 管理Supervisor的项目是使用supervisorctl命令,我们可以启动项目试试看 如果没有报错,应该可以和上一步测试gunicorn一样可以正常访问项目了。 Nginx的各种好处就自行查询吧,我们这里就做一下简单的配置。 因为我的项目一般都是前后端分离的,所以这里这里还会配置CORS来解决跨域的问题 这里就不细说了,整段贴出来,说一下其中一些重点 add_header相关设置主要是CORS,解决跨域的 第一第二行末尾加了always作用是默认CORS只对2XX状态码有效,如果你用4XX或者别的错误状态返回结果依旧会提示跨域,所以加上always使得所有状态都可以正确返回。 Allow-Methods:请根据直接用到的请求方式进行设置,OPTIONS一定需要加上。 Allow-Headers:如果你在header的头部加上了自定义字段,请在这里也加上。 、、、 if ($request_method = 'OPTIONS') { return 204; } 、、、 CORS在进行POST请求前会发一次OPTIONS请求试探试探,这里我们只要检测到OPTIONS请求,我们就返回204,告诉浏览器来吧来吧。 proxy_pass就是设置Nginx转发的地址,也就是设置成Gunicorn设置的地址和端口 proxy_set_header请根据你设置Nginx Server的端口填写 最后重启一下Nginx就可以了 看着步骤很多,其实除了Gunicorn都不是必须的,Supervisor和Nginx你要是不想使用其实也可以不使用,我说得比较啰嗦,不过其实很容易。
㈢ 我用flask-sqlalchemy为什么无法更新我的sqlite文件
加载方法很简单,在所有的库文件后面添加上如下两句:;手动添加的php的pdo的驱动扩展支持extension=php_pdo.dllextension=php_pdo_sqlite.dll下面还有一个很重要的工作,就是我们要把扩展库的路径告诉php否则,PHP不知道去哪里找这些小宝贝了^_^ ,我们查找到如下的行:(查找关键字:extension_dir):; Directory in which the loadable extensions (moles) reside.extension_dir = "c:\php\ext"把它设置为动态库存方的路径,我们这里是:c:\php\ext好了PHP的配置文件我们修改好了,保存关闭。我们下面开始右击状态栏里面那个小羽毛的图标,选择“Open Apache Monitor”打开Apache监视窗口,我们选择右边一列按钮里面的“Stop”按钮,将服务暂时关掉。然后我们打开“开始-〉程序-〉Apache HTTP Server 2.0.54-〉Configure Apache Server-〉Edit the Apache httpd.conf Configuration File”菜单,打开Apache的配置文件httpd.conf。在这里面我们要把php当作Apache的一个模块加载进来。我们在配置文件的最后面加上如下两句。请注意路径问题哦:LoadMole php5_mole "c:/php/php5apache2.dll"AddType application/x-httpd-php .php这样当Apache启动的时候就把PHP加载进来了。再寻找下面的行(查找关键字:DocumentRoot):#DocumentRoot "D:\website"设置我们站点的根目录。我选在D:\website下面。我们还要寻找如下的行:(查找关键字:DirectoryIndex)#DirectoryIndex index.html index.html.var这里我们可以设置自己的首页名称,在后面加上我们使用的文件名即可.中间使用空格分隔。例如:#DirectoryIndex index.html index.html.var index.php default.php至此,我们所有的配置完成了,请大家保存关闭。然后再次启动Apache监视窗口,选择右边的“Start”按钮,启动Apache服务器,最后拉~~如果要测试SQLite数据库的话,我们使用一些SQLite建表工具,建一个数据库跟一些表,然后输入一些数据字段,最后使用自己喜欢的编辑器,在里面输入如下代码:php// Connect to an ODBC database using driver invocation$dsn = 'sqlite:c:\sql.db';try {$dbh = new PDO($dsn, $user, $password);echo 'PDO Connection Ok','';$dbh->exec("CREATE TABLE PKU(id integer,name varchar(255))");echo 'Create Table ok','';$dbh->exec("INSERT INTO PKU values(1,'jarjin')");echo 'Insert Data ok','';$dbh->beginTransaction();$sth = $dbh->prepare('SELECT *FROM PKU');$sth->execute();$result = $sth->fetchAll();print_r($result);$dsn=null;} catch (PDOException $e) {echo 'Connection failed: ' . $e->getMessage();$dsn=null;}?>
㈣ nginx+uwsgi+flask搭建后怎么访问.py文件
一、介绍
最近开发要用一个测试环境,是这样的Nginx+uwsgi+flask 的一个结构。下面是一些记录,在Centos 系统上使用Flask 架构部署一个简单的Python应用。然后使用Nginx作为前端反向代理,设置uWSGI应用网关处理web应用程序。
二、条件
1) 环境要求
Server OS:最小化安装 Centos 6.8
Nginx :反向代理
Python2.6~2.7:开发语言
Flask/uWSGI:框架
Pip:python包管理工具
iptables&selinux:开放用到的端口,关闭selinux。
以上内容代理了uwsgi的端口,客户端通过访问nginx的80端口,然后nginx在将请求转发到后台flask应用的8000端口上。
启动nginx
[[email protected] ~]# service nginx startStarting nginx: [ OK ]
在浏览器内测试访问一下nginx:http://192.168.30.58
每个人都应是守望者,守望我们的心智,我们的理想,以防它在生活中不知不觉地坠落、被操控和被自己遗忘。。。
㈤ flask-socketio 怎么部署到nginx
如题使用flask-socketio写了一个简单的基于websocket的聊天室,现在如果想要将其部署到nginx,配置文件应该怎么写? SegmentFault flask-
㈥ 如何部署简单python + flask应用
所需工具:python3.4flasknginxgunicornsupervisor系统环境:Ubuntu 14.04LTS我们先写一个最基本的flask应用:demo.pyfrom flask import Flaskapp = 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-availablesudo vi test (test为配置名称,可以根据自己项目进行命名)test文件的配置为:server { listen 80; # 监听80端口 location / {proxy_pass # 代理本机127.0.0.1:5000的服务} location /static {alias /home/ubuntu/myproject/myblog/app/static; # 负载均衡}}cd ..cd sites-enablesudo ln -s ../sites-available/lwhile . (创建软链接,别漏掉最后的.)sudo service nginx reloadsudo service nginx restart这样nginx的基本配置文件就写好了 接下来我们配置进程管理工具supervisor supervisor可以在后面启动你的python进程,这样很方便1.cd /etc/supervisor/conf.d2.sudo vi test.conf (test为文件名)[program:test] command = /usr/local/bin/gunicorn -b127.0.0.1:5000 /home/ubuntu/myproject/test.py3.sudo supervisorctl4.reload5.start test如果一切正常,做完这所有步骤之后,现在公网的ip访问你的主机,就可以打开你的flask应用了
㈦ 怎么win7中虚拟机配置flask
在蓝图中使用配置文件,可以在蓝图中导入current_app,相关的配置就在config中像这样:from flask import current_appprint current_app.config
㈧ pip 版本错误怎么办
pip安装Python包出现错误是可能是系统没有更新或者出现了bug。
解决方法:
在unix和macos,配置文件为:$HOME/.pip/pip.conf,在windows上,配置文件为:%HOME%pippip.ini。
把所有要安装的包写在一个文件里面,比如requirement.txt(每个包写一行,顶行头写),然后pip安装的时候只需要加参数“-r requirement.txt”即可。
进入目录下使用命令:virtualenv env。
source env/bin/activate,这时候你会发现命令行前面会多出个(env)标识,这表明你已经进入了虚拟环境了。
写个简单的hello.py验证:#!/usr/bin/pythonfrom flask import Flaskapp = Flask(__name__)@app.route('/', methods = ['GET', 'POST'])def hello():return 'Hello world!'if __name__ == '__main__':app.run(),就可以了。
㈨ Python 有哪些好的 Web 框架
作对初学者来说,循序渐进是最重要的,我推荐学习Flask(Welcome|Flask(APythonMicroframework))
Flask很轻,花很少的成本就能够开发一个简单的网站。非常适合初学者学习。
Flask框架学会以后,可以考虑学习插件的使用。例如使用WTForm+Flask-WTForm来验证表单数据,用SQLAlchemy+Flask-SQLAlchemy来对你的数据库进行控制。
BTW:果壳网基于Flask开发的。
另外也简单介绍下其他框架:
1.Django。如楼上所说,是一个全能型框架。目前Django的使用面还是很广的,有学习的价值,但是不建议初学者学习,因为要学习的东西太多了,一下子难以吸收会失去兴趣。当然,Django的目的是为了让开发者能够快速地开发一个网站,如果对Django熟悉的话,papapa一下子就写好一个网站的原型了。
2.Tornado。传说中性能高高的框架。Tornado是一个很好的框架,支持异步处理的功能,这是它的特点,其他框架不支持。另外一点是,Tornado的设计似乎更注重RESTfulURL。但Tornado提供了网站基本需要使用的模块外,剩下的则需要开发者自己进行扩展。例如数据库操作,虽然内置了一个database的模块(后来独立出去了,现在叫做torndb,bdarnell/torndb·GitHub)但是不支持ORM,快速开发起来还是挺吃力的。如果需要ORM支持的话,还需要自己写一层将SQLAlchemy和Tornado联系起来,而且这里还有一个坑。BTW:知乎就是基础Tornado开发的。
3.Bottle。Bottle和Flask都属于轻量级的Web框架。但是Bottle似乎落寞了。我觉得跟他的API设计有关系。个人认为Bottle使用起来不那么顺手,因此也用得少。这里不做太多介绍。
4.web.py。也是很轻的一个框架,使用不多,也不做介绍。
5.web2py。我看楼上都没有对这个框架做介绍。这个框架是Google在web.py基础上二次开发而来的,兼容GAE。性能据说很高,曾经用他来做自己的主页,感觉也还不错。缺点同样是对扩展支持不太好,需要自己进行扩展。
6.Quixote。著名的豆瓣就是基于Quixote开发的。跟上面几个框架不同,Quixote的路由会有些特别。另外Quixote的性能据说也好。
㈩ 在flask中,怎样在 blueprint 中调用配置文件中的参数
在蓝图中使用配置文件,可以在蓝图中导入current_app,