2011-05-08 41 views
9

我的目标是用Apache设置Python 3。我最大的问题是实际获取mod_python.so。在我的生活中,我发现只有一个网站可以下载(http://www.modpython.org/),而我得到的是一堆构建和安装文件。如何在Apache中使用Python 3和Django?

我找不到解释如何使用Apache设置Python 3的指南。所以如果有人能够通过它现在,互联网终将包含解决方案!

+4

Apache Attic创建于2008年11月,旨在提供流程和解决方案,以便在Apache项目达到其使用期限时清楚地说明问题。 mod_python位于阁楼。使用mod_wsgi – joaquin 2011-05-08 22:25:48

回答

13

Django 1.6+和mod_wsgi 3.4+需要使用Python 3和Apache。有关更多详细信息,请参阅scot's answer

+0

我不明白为什么这是upvoted。它提到'mod_wsgi',这是真的,但它远离漫游。在我看来,这应该作为评论提及,所以我可以编辑我的问题(我现在有 - 使这个答案完全没用) – Hubro 2011-05-08 22:28:49

+3

没有漫游,它不能完成。 Django不支持Python 3.我想你可以拒绝接受答案,因为它不是你想听到的。我听说有人试图在今年夏天将Django移植到Python 3,如果你想看到这种情况发生,你可能需要考虑帮助。 – zeekay 2011-05-08 22:38:26

+0

我的请求是关于如何在Apache(和Django)上使用Python 3的演练。我删除了Django的一部分,因为它不支持Python 3,但这只是一小部分。 – Hubro 2011-05-08 22:49:37

4

你不能使用Django unser python3。从Django常见问题解答: http://docs.djangoproject.com/en/dev/faq/install/#can-i-use-django-with-python-3

我可以在Python 3中使用Django吗?

目前不在。 Python 3.0向Python语言引入了一些向后不兼容的更改,虽然这些更改对于Python的未来通常是一件好事,但大多数Python软件都赶上并能够在Python 3.0上运行的时候已经有一段时间了。对于像Django这样的更大的基于Python的软件来说,转换预计至少需要一两年时间(因为它涉及放弃对较老的Python版本的支持,因此必须逐步完成)。同时,Python 2.x版本将得到Python开发团队的支持并提供bug修复和安全更新,因此在转换过程中继续使用Python 2.x版本不应带来任何风险。

+0

这不是问题,为什么upvote? – Hubro 2011-05-08 22:29:29

+0

@Codemonkey其实它回答_“Django与Apache”_你的问题的一部分。 – 2011-05-08 23:09:38

9

Django 1.6的这些答案不再是真的 - 它支持python3。 mod_wsgi页面说3.4版支持python 3https://code.google.com/p/modwsgi/

不知道这一切是否都适用于这一点虽然(我会返回并编辑,当我发现)!

答案是YES它的工作原理!

我跑Python3,Django的1.5.6的AWS EC3 Ubuntu的情况下,APACHE2.2和mod_wsgi的3.4

的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是一个容易回购已有多个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安装virtualenv。在激活并将环境的bin /目录添加到$ PATH后,我现在已经有了一个干净的python3。

然后,我激活了虚拟环境后,我做了'点Django'和所有其他必要的包(这是不少)。我有Django版本1.6.2(我一直在开发这个和在我的Mac上运行在python 3.3.3没有问题)。

我遇到的最麻烦的问题是安装lxml,因为它需要libxml2和libxslt与apt-get一起安装(它是C代码的包装),并且我花了几次尝试才意识到它们还没有安装(lxml编译失败)。

折腾后我的RDS数据库实例启动并运行并可用(postgresql,请注意python3下的mysql,你会得到很多python db driver的痛苦!但是我的大部分问题都是由于我试图理解AWS安全配置),它是相对简单的航行:

sudo apt-get install apache2 apache2-threaded-dev 

安装apache - 而且你需要下一个位的开发包。

这一点上,我试图使用apt包mod_wsgi的,但我决定做的最好的事情是编译和安装它自己,这里的指示 - https://code.google.com/p/modwsgi/wiki/InstallationInstructions

我没有问题与配置,制作或安装。确保你在virtualenv激活的环境中编译它。

您必须配置手动添加到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 

而且在尽可能广泛的方式,这是所有现在的工作。

2

我遇到了类似的问题,这里是我如何解决它: 安装LAMP:

sudo apt-get install lamp-server^ 
// then do more from here: 
    //https://help.ubuntu.com/community/ApacheMySQLPHP 
// If you will run python services then : 
     apt-get install python-mysqldb 
//and for python 3 install: 
    sudo apt-get install python3-pip python-dev build-essential 
    pip3.4 install mysqlclient // for mysql  connection 
    sudo apt-get install build-essential python-dev libmysqlclient-dev 

    pip3 install virtualenvwrapper 
    sudo nano ~/.bash_profile 
    //Set location of virtualenvs by pasting this in above: 
    export WORKON_HOME=$HOME/.virtualenvs 
    source /usr/local/bin/virtualenvwrapper.sh 
//Reload startup file: 
    source ~/.bash_profile 
    mkvirtualenv -p /usr/bin/python3 myprojectenv 
    workon myprojectenv 
//then you can install packages you want using pip 
//and copy myproject here 

部署一个Django 1.7应用程序的Ubuntu 14.04 LTS服务器上python3和Apache:

sudo apt-get install libapache2-mod-wsgi-py3 
//then configure your apache virtualhosts(here our project is //myproject and environment is myprojectenv): 
在守护进程模式

配置您的虚拟主机,其建议:

<VirtualHost *:80> 
    ServerName yourdomain.com 
    ServerAdmin [email protected] 

    DocumentRoot /home/user/.virtualenvs/myprojectenv/public_html 


    <Directory /home/user/.virtualenvs/myprojectenv/myproject/myproject> 

    <Files wsgi.py> 
    Require all granted 
    </Files> 
    </Directory> 

    ErrorLog /home/user/.virtualenvs/myprojectenv/logs/error.log 
    CustomLog /home/user/.virtualenvs/myprojectenv/logs/access.log combined 
    WSGIScriptAlias//home/user/.virtualenvs/myprojectenv/myproject/myproject/wsgi.py 

    WSGIDaemonProcess myproject python- path=/home/user/.virtualenvs/myprojectenv/prisec:/home/user/.virtualenvs/m yprojectenv/lib/python3.4/site-packages 

    WSGIProcessGroup myproject 
    Alias /static /home/user/.virtualenvs/myprojectenv/public_html/static 

    <Directory /home/user/.virtualenvs/myprojectenv/public_html/static> 
    Require all granted 
    </Directory> 
    Alias /media 
    /home/user/.virtualenvs/myprojectenv/public_html/media 
     <Directory  /home/user/.virtualenvs/myprojectenv/public_html/media> 
    Require all granted 
    </Directory> 

重新启动Apache。 虚拟主机配置文件中的目录必须存在于创建的虚拟环境中。

3

1)我们应该用我们新创建的项目文件做的第一件事是调整设置。与您的文本编辑器打开设置文件:

gedit myproject/settings.py

在文件的底部,我们将添加一行到这个目录配置。 Django使用STATIC_ROOT设置来确定这些文件应该放到哪个目录。我们将使用一些Python语言告诉它使用一种叫做在我们项目的主目录下的“静态”目录:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

2)我们可以收集所有的静态内容到我们配置的目录位置通过键入:

./manage.py collectstatic

您必须确认操作。静态文件将被放置在项目目录中名为static的目录中。3)你需要mod-wsgi适配器来配置Apache中的Django 安装wsgi lib像下面一样。

sudo apt-get install libapache2-mod-wsgi sudo a2enmod wsgi

4)在文件的底部,/etc/apache2/sites-available/000-default.conf

WSGIPythonPath /var/www/html/myproject/ 
WSGIProcessGroup myproject 
WSGIScriptAlias//var/www/html/myproject/myproject/wsgi.py 


    Alias /static /var/www/html/myproject/static/ 

<Directory /var/www/html/myproject/static> 
    Require all granted 
</Directory> 

<Directory /var/www/html/myproject/myproject> 
    <Files wsgi.py> 
     Order deny,allow 
     Require all granted 
    </Files> 
</Directory> 

Alias /media/ /var/www/html/myproject/media/ 
<Directory /var/www/html/myproject/media> 
Require all granted 
</Directory> 
WSGIDaemonProcess myproject python-path=/var/www/html/myproject/ 

5)重新启动apache2的服务器:

sudo service apache2 restart 

6)现在去Localhost

宾果!你都是用apache为Django设置的。

+0

这是一个非常好的答案。实际上,我认为这是考试队列中的一个考验。做得好。 – 2017-03-18 20:35:55