如何在Apache中使用Python 3和Django?

10 投票
5 回答
15222 浏览
提问于 2025-04-16 17:15

我的目标是把Python 3和Apache搭配起来。现在我最大的问题是怎么得到mod_python.so这个文件。我费尽心思只找到一个可以下载的地方(http://www.modpython.org/),结果下载下来一堆构建和安装的文件。

我找不到任何指南来解释如何把Python 3和Apache设置在一起。所以如果有人能现在教我一下,互联网终于就有这个解决方案了!

5 个回答

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 版本是没有风险的。

11

这些回答在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

总的来说,现在这一切都能正常工作。

14

要在Apache服务器上使用Python 3,你需要Django 1.6以上版本和mod_wsgi 3.4以上版本。想了解更多细节,可以参考scot的回答

撰写回答