如何在Apache中使用Python 3和Django?
我的目标是把Python 3和Apache搭配起来。现在我最大的问题是怎么得到mod_python.so这个文件。我费尽心思只找到一个可以下载的地方(http://www.modpython.org/),结果下载下来一堆构建和安装的文件。
我找不到任何指南来解释如何把Python 3和Apache设置在一起。所以如果有人能现在教我一下,互联网终于就有这个解决方案了!
5 个回答
你现在不能在 Python 3 上使用 Django。来自 Django 常见问题解答:
我可以在 Python 3 上使用 Django 吗?
目前不行。Python 3.0 引入了一些与之前版本不兼容的变化,虽然这些变化对 Python 的未来来说是好事,但大多数 Python 软件要跟上这些变化并能在 Python 3.0 上运行还需要一段时间。像 Django 这样的大型 Python 软件,预计需要至少一到两年的时间才能完成这个过渡(因为这涉及到停止对旧版 Python 的支持,所以必须逐步进行)。
在此期间,Python 2.x 版本仍会得到支持,并且 Python 开发团队会提供错误修复和安全更新,所以在过渡期间继续使用 Python 2.x 版本是没有风险的。
这些回答在Django 1.6版本中不再适用——它现在支持Python 3。mod_wsgi页面显示版本3.4支持Python 3。 https://code.google.com/p/modwsgi/
不过我现在不确定这一切是否都能正常工作(等我确认后会回来修改的)!
答案是:是的,它可以工作!
我在AWS的EC2上有一个运行着Python 3、Django 1.5.6、Apache 2.2和mod_wsgi 3.4的Ubuntu实例。
Python 3.3.4:
sudo add-apt-repository ppa:fkrull/deadsnakes
sudo apt-get install python3.3
sudo apt-get install python3.3-dev python3.3-doc idle-python3.3
ppa:fkrull/deadsnakes是一个apt源,提供多个Python版本——可以查看 https://launchpad.net/~fkrull/+archive/deadsnakes
然后我按照pip页面的说明添加了pip; http://pip.readthedocs.org/en/latest/installing.html。(记住,此时你的Python可能被称为'python3.3',而普通的'python'会指向Python 2.x!)
之后,我使用了virtualenv。然后我在Python安装中创建了一个虚拟环境。激活后,把环境的bin/目录添加到$PATH中,这样我就得到了一个干净的Python 3。
接着,在激活虚拟环境后,我运行了'pip install Django'和其他我需要的包(数量还不少)。我安装了Django 1.6.2(我在Mac上用Python 3.3.3开发这个,没问题)。
我遇到的最大麻烦是安装lxml,因为它需要通过apt-get安装libxml2和libxslt(它是C代码的一个封装),我花了几次尝试才意识到它们并没有被安装(lxml编译会失败)。
在努力让我的RDS数据库实例运行并可用(使用postgresql,注意在Python 3下使用mysql会遇到很多数据库驱动的问题!不过大部分问题是我在理解AWS安全配置时造成的),之后就相对顺利了:
sudo apt-get install apache2 apache2-threaded-dev
这会安装apache——接下来你需要开发包。
在这时,我尝试使用apt包来安装mod_wsgi,但我决定自己编译和安装,按照这里的说明进行—— https://code.google.com/p/modwsgi/wiki/InstallationInstructions
我在配置、编译和安装时没有遇到问题。确保在激活的虚拟环境中进行编译。
你需要手动将配置添加到Apache的配置文件中:
# wsgi module
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
# now configure it
<Directory /my/app/path>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
WSGIScriptAlias / /my/app/path/wsgi.py
WSGIPythonPath /my/app:/path/to/the/virtual/env/lib/python3.3/site-packages
总的来说,现在这一切都能正常工作。
要在Apache服务器上使用Python 3,你需要Django 1.6以上版本和mod_wsgi 3.4以上版本。想了解更多细节,可以参考scot的回答。