文档章节

终于搞定flask+win+apache+mod_wsgi+virtualenv的部署发布!!

Klaus88
 Klaus88
发布于 2014/11/05 12:27
字数 593
阅读 496
收藏 5

1、安装python 2.7

2、安装apache或者xampp

3、下载mod_wsgi.so,放到apache下modules文件夹下,并修改httpd.conf以加载模块。

   http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi

LoadModule wsgi_module modules/mod_wsgi.so


4、安装pip,指南:
   https://pip.pypa.io/en/latest/installing.html#install-pip

5、安装virtualenv,cmd下
   pip install virtualenv

6、建立虚拟环境FlaskEnv2,cmd下
   virtualenv D:\PythonProjects\FlaskEnv2

7、进入FlaskEnv2目录,cmd下
   cd D:\PythonProjects\FlaskEnv2\Scripts

8、安装Flask和其他插件,cmd下
pip install flask
pip install flask-login
pip install flask-openid
pip install flask-mail
pip install flask-sqlalchemy
pip install sqlalchemy-migrate
pip install flask-whooshalchemy
pip install flask-wtf
pip install flask-babel
pip install guess_language
pip install flipflop
pip install coverage

9、修改apache的设置文件 C:\xampp\apache\conf\extra\httpd-vhosts.conf

<VirtualHost *:80>
        ServerName example.com
        WSGIScriptAlias / "D:/PythonProjects/apricot/apricot.wsgi"
        <Directory "D:/PythonProjects/apricot">
        <IfVersion < 2.3 >
        Order allow,deny
        Allow from all
        </IfVersion>
        <IfVersion >= 2.3>
        Require all granted
        </IfVersion>
        </Directory>
</VirtualHost>

注意!!路径里的斜杠“/”是这个方向的,不是“\”这个方向的!这里要搞死人了!
还有下面的权限设置,用这里的这段。查了很久!

10、修改hosts文件,加入解析来测试
127.0.0.1        example.com

11、创建一个wsgi文件来测试 D:\PythonProjects\apricot\apricot.wsgi
代码如下:

##########开始#######
activate_this = 'D:/PythonProjects/FlaskEnv2/Scripts/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
import site
import sys
# Remember original sys.path.
prev_sys_path = list(sys.path) 
# Add site-packages directory.
site.addsitedir('D:/PythonProjects/FlaskEnv2/Lib/site-packages')
# Reorder sys.path so new directories at the front.
new_sys_path = [] 
for item in list(sys.path): 
    if item not in prev_sys_path: 
        new_sys_path.append(item) 
        sys.path.remove(item) 
        sys.path[:0] = new_sys_path 
sys.path.insert(0, 'D:/PythonProjects/apricot')
from app import app as application
if __name__ == '__main__': #感觉写在这里好点
    app.run(debug=True)
##############结束#########

这段代码引入了独立环境到项目中,注意哦!
还是要注意那个斜杠“/”,走了不少弯路
然后就是那几个路径了,之前建立的独立环境等

12、建立一个测试的py文件 D:\PythonProjects\apricot\app.py
代码如下:

###########开始#######
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "Hello, I'm Apricot!"
if __name__ == "__main__":
    app.run()
###########结束#######

13、打开Apache,然后开ie,打开http://example.com/,看到了吧
经测试,包括sqlite的本地读写,都一切正常^_^

14、有关静态文件的访问(图、js和css等),还没研究。


参考:
Windows Python虚拟环境配置(Distribute + pip + virtualenv + virtualenvwrapper-powershell)
http://my.phirobot.com/blog/2014-02-python_in_windows.html

引入独立环境的方法
http://blog.nutenstudio.com/flask-apache-virtualenv/

有关静态1
http://jyd.me/python/use-django-with-apache-mod_wsgi/

留一下
http://blog.xavierskip.com/2014-06-18-apache-wsgi/

留2
https://www.digitalocean.com/community/tutorials/how-to-deploy-a-flask-application-on-an-ubuntu-vps

django有关静态的设置
https://django-chinese-docs.readthedocs.org/en/latest/howto/deployment/wsgi/modwsgi.html

© 著作权归作者所有

共有 人打赏支持
Klaus88
粉丝 5
博文 15
码字总数 7457
作品 0
南宁
高级程序员
私信 提问
加载中

评论(13)

gatspy
gatspy
谢谢啊。真是帮了大忙!
Klaus88
Klaus88

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

看来还是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 这里下的靠谱。 自己编译的不行。。。

自己编译也太牛逼了吧?我有1年没弄c++了。另外,我开发机上的Apache一启动会提示个什么错误,不过按了确定就没事了,服务器上没这个错误,奇怪了。
这种部署方式,我测了下,如果修改文件上传后,必须重启apache服务器才能生效?

重启apache和删pyc。我有次懒得删pyc,出现了神奇的bug,哈哈
有啥最佳的部署方式吗? 我是想 能够先都编译成pyc文件然后打包一次性部署。更新也是重新替换包就可以了

没有哦,部署也不是很频繁的操作啊,感觉现在就更好了

很好,错字
Klaus88
Klaus88

引用来自“王化鹏”的评论

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

看来还是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 这里下的靠谱。 自己编译的不行。。。

自己编译也太牛逼了吧?我有1年没弄c++了。另外,我开发机上的Apache一启动会提示个什么错误,不过按了确定就没事了,服务器上没这个错误,奇怪了。
这种部署方式,我测了下,如果修改文件上传后,必须重启apache服务器才能生效?

重启apache和删pyc。我有次懒得删pyc,出现了神奇的bug,哈哈
有啥最佳的部署方式吗? 我是想 能够先都编译成pyc文件然后打包一次性部署。更新也是重新替换包就可以了

没有哦,部署也不是很频繁的操作啊,感觉现在就更好了
王化鹏
王化鹏

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

看来还是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 这里下的靠谱。 自己编译的不行。。。

自己编译也太牛逼了吧?我有1年没弄c++了。另外,我开发机上的Apache一启动会提示个什么错误,不过按了确定就没事了,服务器上没这个错误,奇怪了。
这种部署方式,我测了下,如果修改文件上传后,必须重启apache服务器才能生效?

重启apache和删pyc。我有次懒得删pyc,出现了神奇的bug,哈哈
有啥最佳的部署方式吗? 我是想 能够先都编译成pyc文件然后打包一次性部署。更新也是重新替换包就可以了
Klaus88
Klaus88

引用来自“王化鹏”的评论

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

看来还是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 这里下的靠谱。 自己编译的不行。。。

自己编译也太牛逼了吧?我有1年没弄c++了。另外,我开发机上的Apache一启动会提示个什么错误,不过按了确定就没事了,服务器上没这个错误,奇怪了。
这种部署方式,我测了下,如果修改文件上传后,必须重启apache服务器才能生效?

重启apache和删pyc。我有次懒得删pyc,出现了神奇的bug,哈哈
王化鹏
王化鹏

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

看来还是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 这里下的靠谱。 自己编译的不行。。。

自己编译也太牛逼了吧?我有1年没弄c++了。另外,我开发机上的Apache一启动会提示个什么错误,不过按了确定就没事了,服务器上没这个错误,奇怪了。
这种部署方式,我测了下,如果修改文件上传后,必须重启apache服务器才能生效?
Klaus88
Klaus88

引用来自“王化鹏”的评论

看来还是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 这里下的靠谱。 自己编译的不行。。。

自己编译也太牛逼了吧?我有1年没弄c++了。另外,我开发机上的Apache一启动会提示个什么错误,不过按了确定就没事了,服务器上没这个错误,奇怪了。
王化鹏
王化鹏
看来还是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 这里下的靠谱。 自己编译的不行。。。
王化鹏
王化鹏
我按照你的文档配置了下, 一访问apache就crash。
我的apache是基于xampp按照的2.4版本。
mod_wsgi.so 是基于4.4.2版本自己编译的。
其他和你的一样。
Klaus88
Klaus88

引用来自“瓜瓜jx”的评论

引用来自“Klaus88”的评论

引用来自“瓜瓜jx”的评论

wsgi一定要自己写么??

直接复制我的,改一下就行了
官网上说直接加from yourapplication import app as application就行啊

你没仔细看官网的说明,你说的那个只适用于简单的环境,换句话说就是开发时,不是部署不是用了工厂方法等的实际情况。其实由于flask算是比较底层的,所以你会觉得wsgi的写法和我们平时的flask程序也差不多。
完整版的linphone-android源代码

在国内下载linphone-android的源代码不是缺东就是少西,花费一个多星期的时间终于搞定了.各种依赖库都在.大家需要的赶紧下载.下载后可以直接导入eclipse,然后在部署到手机就可以使用了 http:/...

just4regist
2012/12/03
0
4
python tornado mysql 内容管理后台部署

我的第一个python语言的CMS终于要部署啦,现在来看下整个的project: 其中, back_handler是后台管理部分内容,包括添加、编辑、删除、查看等内容的操作。 db_scripts是所有数据库操作的集合...

何世友
2011/07/09
0
0
ClassNotFoundException: JspException

给这个问题耗上了, 我一定要把罪魁祸首找不来 找不出来不下班!!! ===== 19:44 更新 ===== 问题终于解决了,但是为什么导致这样的问题还是没能找出来。不过发现这个问题还是因为个人的操...

大师兄悟空
2014/04/09
1K
5
Cocos2d-html5 2.0 发布

期待已久的正式版本2.0终于发布了,A现在三个引擎API统一起来,正式定案,以后不会有大变动了。Cocos2d-html5可以作为JS binding的开发入口了,三个引擎的测试例以它为准,一次开发搞定HTML5...

林顺Sean
2012/08/28
2.6K
2
QueryPHP 1.0.0-alpha.1 发布,渐进式 PHP 常驻框架引擎

HI,各位 2018 已接近尾声,在这个秋意满满的时节,小牛仔潜心研究 2 年的 QueryPHP 将迎来了自己第一个测试版本。 早在 2009 年 2 月份,我开始接触 PHP 这门语言,那个时候边学些边开发,并...

doyouhaobaby
11/08
1K
16

没有更多内容

加载失败,请刷新页面

加载更多

MicroStation Developer Shell

REG ADD HKLM\SOFTWARE\Microsoft\VisualStudio\8.0\Setup\VS /v ProductDir /t REG_SZ /d "C:\Program Files (x86)\Microsoft Visual Studio 8\VC\" /reg:32 CALL "C:\Program Files (x86)\......

oready
5分钟前
0
0
CURL常用命令

下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://www.centos.org 通过-o/-O选项保存下载的文件到指定的文件中: -o:将文件保存为命令行中指定的文件名的文件中 -O:使用U...

SuShine
9分钟前
0
0
docker搞个wordpress

1.先把wordpress的镜像下载下来 docker pull wordpress 2.下载mysql docker pull mysql:lastest 3.启动mysql docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:t......

无极之岚
21分钟前
1
0
【宇润日常疯测-005】PHP 中的 clone 和 new 性能比较

clone和new本不应该放在一起比较,它们的作用是不同的。但可能有一些场景下,可以用clone也可以用new,那么这时候我们选哪个呢? 我编写了两个测试,第一个是声明一个空类,第二个是带构造方...

宇润
22分钟前
1
1
点击按钮弹出类似IOS 底部 dialog

implementation 'com.baoyz.actionsheet:library:1.1.7' 然后设置按钮点击监听,,调用下列代码即可 ActionSheet.createBuilder(this, getSupportFragmentManager()) ......

lanyu96
25分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部