window部署python项目_Django在Window下的部署

转载 : codingsoho.com

前言

本文主要介绍利用apache去部署Django项目,所有步骤均在本机Window7和阿里云验证通过。

配置

本例的基本配置如下:

工作目录: C:/virtualenv/zakkabag

项目名称: zakkabag

最终的安装版本如下,后面我会一步一步描述如何安装

操作系统

python

mysql

apache

Windows Server 2016 64bit

python 2.7.3 (32 位)

python-2.7.3.msi

32位安装版

mysql-5.5.12-win32.msi

MySQL-python-1.2.4b4.win32-py2.7.exe

32位安装版

httpd-2.2.25-win32-x86-no_ssl.msi

mod_wsgi-win32-ap22py27-3.3

安装

Python2.7.3

Windows x86 MSI Installer (2.7.3) (sig) http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi

安装路径: D:\Python27 (example)

安装完成之后,记得把D:\Python27加入环境变量Path,这样Python命令可以在任意路径执行

执行python命令,如果出现下面信息,说明安装已成功

C:\Users\User1>python

Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32

Type "help", "copyright", "credits" or "license" for more information.

Django

Django的安装有多种方法,可以从源码安装,也可以利用pip命令安装

源码安装

文件路径; D:\Django-1.5.5 (example),这是一个很老的版本,之前用这个方法安装过,这儿仅是提供一种方法,一般我现在采用pip方法安装

安装命令:

cd D:\Django-1.5.5

python setup.py install

Django会在python Lib目录下面创建新的目录: d:\Python27\Lib\site-packages\django

….

byte-compiling d:\Python27\Lib\site-packages\django\views\i18n.py to i18n.pyc

byte-compiling d:\Python27\Lib\site-packages\django\views\static.py to static.py

……

byte-compiling d:\Python27\Lib\site-packages\django\views\__init__.py to __init__.pyc

byte-compiling d:\Python27\Lib\site-packages\django\__init__.py to __init__.pyc

running install_scripts

creating d:\Python27\Scripts

copying build\scripts-2.7\django-admin.py -> d:\Python27\Scripts

running install_egg_info

Writing d:\Python27\Lib\site-packages\Django-1.5.5-py2.7.egg-info

把D:\Python27\Lib\site-packages\加入环境变量path

把D:\Python27\Script加入环境变量Path,这样django-admin.py可以在任意目录运行

pip安装

pip install django==1.5.5

mysql & MySQLLdb

参考mysql安装指南

Apache2.2

安装版

从官网下载apache安装包http://httpd.apache.org/download.cgi,我的安装路径为d:\Program Files\

我之前用的版本是httpd-2.2.25-win32-x86-no_ssl.msi,官网已经找不到了,我的理解只要装同一系列应该问题就可以了。

安装完成之后,主要的路径及文件如下:

d:\Program Files\Apache Software Foundation\Apache2.2\modules\ 组件位置,需要加载的组件放在该路径

d:\Program Files\Apache Software Foundation\Apache2.2\conf\ httpd.conf 最重要的配置文件

D:\Program Files\Apache Software Foundation\Apache2.4\logs 相关错误打印可以在下面文件找到

免安装版

下载

配置

需要将一些对应的路径替换掉,以httpd-2.2-x64版本为例,将安装文件httpd-2.2.19-win64.rar解压到目录D:/PythonWebSW

文件conf/httpd.conf

ServerRoot "/httpd-2.2-x64"

DocumentRoot "/httpd-2.2-x64/htdocs"

ScriptAlias /cgi-bin/ "/httpd-2.2-x64/cgi-bin/"

替换为

ServerRoot "D:/PythonWebSW/httpd-2.2.19-win64"

DocumentRoot "D:/PythonWebSW/httpd-2.2.19-win64/htdocs"

ScriptAlias /cgi-bin/ "D:/PythonWebSW/httpd-2.2.19-win64/cgi-bin/"

文件conf/extra/httpd-vhosts.conf

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot "/httpd-2.2-x64/docs/dummy-host.example.com"

ServerName dummy-host.example.com

ServerAlias www.dummy-host.example.com

ErrorLog "logs/dummy-host.example.com-error.log"

CustomLog "logs/dummy-host.example.com-access.log" common

ServerAdmin webmaster@dummy-host2.example.com

DocumentRoot "/httpd-2.2-x64/docs/dummy-host2.example.com"

ServerName dummy-host2.example.com

ErrorLog "logs/dummy-host2.example.com-error.log"

CustomLog "logs/dummy-host2.example.com-access.log" common

替换为

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot "D:/PythonWebSW/httpd-2.2.19-win64/docs/dummy-host.example.com"

ServerName dummy-host.example.com

ServerAlias www.dummy-host.example.com

ErrorLog "logs/dummy-host.example.com-error.log"

CustomLog "logs/dummy-host.example.com-access.log" common

ServerAdmin webmaster@dummy-host2.example.com

DocumentRoot "D:/PythonWebSW/httpd-2.2.19-win64/docs/dummy-host2.example.com"

ServerName dummy-host2.example.com

ErrorLog "logs/dummy-host2.example.com-error.log"

CustomLog "logs/dummy-host2.example.com-access.log" common

安装

D:\PythonWebSW\httpd-2.2.19-win64\bin>httpd -k install

有的时候会报错

D:\httpd-2.2.19-win64\bin>httpd -k install

Installing the Apache2.2 service

The Apache2.2 service is successfully installed.

Testing httpd.conf....

Errors reported here must be corrected before the service can be started.

httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.1.101 for ServerName

(OS 10013)An attempt was made to access a socket in a way forbidden by its access permissions.  : make_sock: could not bind to address 0.0.0.0:80

no listening sockets available, shutting down

Unable to open logs

原因及解决:有可能是系统80端口默认被占用了,可以修改conf/httpd.conf监听端口,Listen 80 修改为 Listen 8081(或其他端口号)

启动

D:\PythonWebSW\httpd-2.2.19-win64\bin>start httpd

卸载

D:\PythonWebSW\httpd-2.2.19-win64\bin>httpd -k uninstall

mod_wsgi

下载

注意:下载mod_wsgi.so版本需和python和apache匹配

我之前下过一个对应apache22和python2.7的版本,名字mod_wsgi-win32-ap22py27-3.3,这个可以直接用,所以一直用着,网上可以直接搜到。

安装和配置

将mod_wsgi.so放到d:\Program Files\Apache Software Foundation\Apache2.2\modules\ , 并在httpd.conf里添加

LoadModule wsgi_module modules/mod_wsgi.so

httpd.conf的位置在d:\Program Files\Apache Software Foundation\Apache2.2\conf\

注意:apache装载wsgi模块,名字可以自定义

配置 httpd.conf

搜索http.conf文件,把"Deny from all" 及 "Require all denied" 等语句全部注释掉:

Options FollowSymLinks

AllowOverride None

Require all denied

Order deny,allow

Deny from all

修改为

Options Indexes FollowSymLinks

AllowOverride None

测试wsgi

添加test.wsgi文件,我放在项目下面的apache文件夹下,这个文件夹是专门用来放跟apache相关的配置的

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]

在http.conf里面引入这段代码

Include " C:/virtualenv/zakkabag/apache /test.wsgi "

注:这儿监听端口是8081

项目配置

项目主目录

在项目目录下面创建一个文件夹apache,添加文件"django.wsgi" & "apache_django_wsgi.conf"

和test.wsgi一样,我们也可以用这个方法引入这段配置

Include " C:/virtualenv/zakkabag/apache/apache_django_wsgi.conf"

注:这些配置文件可直接写在httpd.conf文件里,但我倾向于用专门的文件,这样便于项目维护

apache_django_wsgi.conf

测试项目

WSGIScriptAlias / " C:/virtualenv/zakkabag/apache/test.wsgi"

实际项目

WSGIScriptAlias / " C:/virtualenv/zakkabag/apache/django.wsgi"

Options FollowSymLinks

AllowOverride None

Order deny,allow

Allow from all

django.wsgi

os.environ['DJANGO_SETTINGS_MODULE']="zakkabag.settings"

importdjango

django.setup()

importdjango.core.handlers.wsgi

application =django.core.handlers.wsgi.WSGIHandler()

静态资源

apache_django_wsgi.conf

Alias /static "C:/virtualenv/ zakkabag /static_in_env/static_root"

Order allow,deny

Allow from all

Django的setting里

Settings.py

STATIC_URL = '/static/'

重启

配置完成之后记得重启apache

常见问题

问题1(OS 5)Access is denied. : Apache2.2: OpenService failed

如果出现这个错误,用管理员权限打开cmd

问题2(OS 1072)The specified service has been marked for deletion. : Apache2.2: Failed to delete the service.

将service里面的停掉

问题3ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

原因是MysqlLdb没有安装好,具体参考mysql安装指南文章

Window 安装文件:

MySQL-python-1.2.3.win-amd64-py2.7.exe

Linux:

MySQL-python==1.2.3

生成的文件如下

MySQL_python-1.2.3-py2.7.egg-info (文件夹)

MySQLdb (文件夹)

_mysql.pyd

_mysql_exceptions.py

_mysql_exceptions.pyc

_mysql_exceptions.pyo

问题4机器上可能会配置多个apache,有的时候安装新的apache时需要先把之前install的uninstall

问题5 Django: AppRegistryNotReady()

在 django.wsgi, 添加setup()

os.environ['DJANGO_SETTINGS_MODULE']="zakkabag.settings"

importdjango

django.setup()

importdjango.core.handlers.wsgi

application =django.core.handlers.wsgi.WSGIHandler()

setup()

This function is called automatically:

When running an HTTP server via Django's WSGI support.

When invoking a management command.

It must be called explicitly in other cases, for instance in plain Python scripts.

关注下方公众号获取更多文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chrome gwt1.7_快速提示:使用Chrome开发工具调试GWT应用程序

chrome gwt1.7调试是软件开发的重要方面。 拥有正确的工具可以节省大量时间和头痛。 在GWT Super Dev模式之前,经典的Dev模式允许使用JVM调试。 开发人员可以在其IDE中设置断点,并使用调试模式来跟踪错误和错误。 现在,在超级开发模式下&…

java事件编程_java基础 ---Swing事件编程

java基础 ---Swing事件编程GUI的设计就剩个菜单组建,这个组件也是想当于容器套容器,在设计方面没有什么难度,主要是一些事件的响应。还有另一种事件的监听方式,也就是适配器监听方法。1、菜单要设计一个菜单那么有三大组件是不可或…

python3鄙视python2_Python3 正在毁灭 Python的原因分析

Python 3毫不费力地成为发生在Python社区里最糟糕的事。我还记得第一次使用Python的时候,我还在花大量时间在C这块上,而Python就像是我的一次开光。我可以打开文本编辑器用几秒钟或者几分钟写出一个可以工作的程序,而不是用几小时或几天。我记…

Java如何加载类的呢?

JVM加载类 首先查看内存中是否存在该类(内存中所有类都是以Class的实例对象存在),若不存在则会通过环境变量中的路径值在电脑或者其它设备的硬盘中找到该类(即.class文件),然后JVM会将其读取到内存中&…

brew卸载jenv_使用brew,cask和jenv在MacOSX上设置多个Java JRE / JDK

brew卸载jenv昨天在Java9的Jigsaw HackTheTower事件中,我意识到我需要加强我的游戏并改善我现有的机制,以在我的机器上维护几个不同的JDK。 我曾经手动下载jdk,或使用brew cask来安装它们,我会在我的〜/ bash_profile中设置bash …

java过滤器api_springboot集成过滤器

封装自定义接口filter包含两个方法,第一个过滤的路径数组,第二个为过滤器执行的顺序.spring boot 会按照order值的大小,从小到大的顺序来依次过滤。package com.theeternity.common.baseFilter;import javax.servlet.Filter;/*** program: ApiBoot* description: 封…

Servlet 运行原理

文章目录Servlet 如何运行演示 Servlet 运行原理Servlet 如何运行 用户向浏览器地址栏输入:http://ip:port/helloweb/sayHello?namezs 浏览器使用 ip:port(端口号)连接服务器 浏览器将请求数据按照 http 协议打成一个数据包(请求数据包)发送给服务器 请求数据包…

python dicom 器官分割_python+opencv阈值分割

37 #获取像素点的最大值和最小值38 arr_temp np.reshape(img_arr,(lens,))39 max_val max(arr_temp)40 min_val min(arr_temp)41 #图像归一化42 img_arr (img_arr-min_val)/(max_val-min_val)43 #绘制图像并保存44 #保存图片时去掉周围白边45 plt.axis(off)46 fig plt.gcf()47…

解析浏览器访问服务器 Servlet 应用程序的交互过程(Servlet 容器如何处理请求资源路径)

案例 1: 请求资源路径:http://localhost:8080/web01/greeting?namezs 浏览器通过 localhost:8080 连接服务器;服务器在 webapps 目录下寻找 web01 目录,找到后进入web01 目录内寻找 WEB-INF 目录,在进入 WEB-INF 目…

java github_GitHub Research:超过50%的Java记录语句写错了

java github为什么生产日志无法帮助您找到错误的真正根本原因? 询问您是否使用日志文件监视您的应用程序几乎就像询问…您是否喝水。 我们都使用日志,但是我们如何使用它们则是一个完全不同的问题。 在下面的文章中,我们将对日志进行更深入…

yolov5论文_YOLOv5的妙用:学习手语,帮助听力障碍群体

编辑:魔王、杜伟计算机视觉可以学习美式手语,进而帮助听力障碍群体吗?数据科学家 David Lee 用一个项目给出了答案。如果听不到了,你会怎么办?如果只能用手语交流呢?当对方无法理解你时,即使像订…

python制作系统程序与html交互_python+html语音人物交互_flask后台与前端(html)交互的两种方法...

基于python flask框架搭建webflask后台与前端(html)交互的两种方法:方法1 使用flask-wtf 提供的表单用常见的登录为例:// An highlighted blockfrom flask_wtf import Formclass LoginForm(Form): # 登录表单ROLE SelectField(角色, choices[(s, 管理员…

Java 程序执行过程的内存流程图(结合类加载器 ClassLoader 讲解)

Student s new Student(); s.play(); Student s2 new Student();以上代码的执行流程如下: JVM 作为操作系统的一个迚程在系统中执行,那么系统会为 JVM 分配一块内存空间,这块内存空 间被 JVM 分为 3 大块(栈区、堆区、方法区) 一般而言&a…

java javap_javap的用途不断发展:您的Java类文件中隐藏了什么?

java javap什么是Javap,如何使用它以及何时要反汇编类文件? 作为Java开发工具包(JDK)的一部分,我们可以使用许多工具,这些工具有助于更好地理解Java代码。 这些工具之一是javap命令,它使我们能…

虚拟内存越大越好吗_手机的运行内存真的是越大越好吗?6GB和8GB到底又该如何选择?...

许多人买手机,除了看处理器、外观以外,关注最多的莫过于手机的运行内存了。选择一个合适的运行内存几乎关系到整个手机使用寿命和命脉。那么我们现在买手机选择多大的运行内存合适呢?真的是越大越好吗?下面我们就来一起看看吧。选…

Adobe PhotoShop(PS) for Windows 快捷键/PS快捷键

文章目录一、工具栏二、文件操作三、选择功能四、视图操作五、编辑操作六、图像调整七、图层操作一、工具栏 功能说明快捷键备注移动工具V矩形、椭圆选框工具M套索、多边形套索、磁性套索L快速选择工具、魔棒工具W裁剪、透视裁剪、切片、切片选择工具C吸管、颜色取样器、标尺、…

kafka和storm集成_Storm和Kafka集成的重要生产错误和修复

kafka和storm集成我将在此处描述Storm和Kafka集成模块的一些细节,一些您应该意识到的重要错误以及如何克服其中的一些错误(尤其是对于生产安装)。 我在生产安装中大量使用Apache Storm,并将Kafka作为主要输入源(Spout…

显微镜自动聚焦原理是什么_什么是共聚焦显微镜?你了解过共聚焦显微镜吗?...

更出色的表面分析ZEISS Smartproof 5产品表面粗糙度质量控制ZEISS Smartproof 5是一款集成式转盘共聚焦显微镜,依托孔径关联技术将传统共聚焦显微镜的高分辨率与转盘系统的高速采集相结合,能够高速、准确地采集表面3D数据。二维测量:距离、高…

java string args_java – 语法“final String … args”是什么意思/做什么?

Java中参数的省略号表示类型的vararg.因此,在您的情况下,…意味着您可以将任意数量的String参数传递给doInBackground方法.因此,您可以调用此方法doInBackground(“String1”,“String2”,“String3”)或doInBackground(“String1”)或doInBackground(“String1”,“String3”,…

Java 程序执行过程的内存流程图(手写稿)

操作系统会分配一定的内存空间给JVM,空间大小可以在JVM里面设置,JVM会将内存分为三个区域:栈、堆、方法区。